2017-06-10 2 views
0

J'essaie de chiffrer des mots de passe en utilisant la librairie Libsodium en utilisant Kalium comme warp Java. J'essaye de l'installer mais je cours dans quelques issues. J'ai ajouté la dépendance de Kalium à mon pom.xml et ai placé le libsoidum dans mon javapath comme indiqué here. Maintenant, je veux vraiment utiliser la bibliothèque pour hacher mes mots de passe et commencer à les enregistrer dans ma base de données. (Je sais que oAuth est préféré mais ce n'est pas une option dans le logiciel.) Le problème est que je n'ai aucune idée de comment utiliser réellement le wrapper. Je ne trouve pas de documentation ou d'exemples. Y at-il une source qui peut m'aider?Utilisation de Libsodium/Kalium dans un projet java

+0

Pourquoi cette bibliothèque spécifique? – Tim

+0

@Tim J'utilise maintenant le fichier Windows x64 .dll. Je dois trouver un moyen de le porter à heroku (en utilisant éventuellement une autre bibliothèque) car à la fin l'application sera déployée là. – Luminai

+1

Ce n'est pas ce que je voulais dire; Vous dites que vous voulez chiffrer les mots de passe avec Java; Qu'est-ce que 'libsodium' que vous voulez utiliser n'est pas disponible dans les centaines d'autres bibliothèques de chiffrement plus facilement intégrées à Java? – Tim

Répondre

1

Essayez cette

import com.muquit.libsodiumjna.SodiumLibrary; 
import com.muquit.libsodiumjna.exceptions.SodiumLibraryException; 
import java.nio.charset.StandardCharsets; 

public class Encrypt2 { 


private static String libraryPath = "D:/libsodium/libsodium.dll"; 

private static String ourPassPhrase = "your very secret password"; 
private static byte[] passPhrase = ourPassPhrase.getBytes(); 
private static String ourMessage = "password which you want to encrypt and decrypt"; 
private static byte[] privateKey = (ourMessage.getBytes()); 


public static void main(String[] args) throws Exception { 

    SodiumLibrary.setLibraryPath(libraryPath); 
    encrypt(); 
    decrypt(); 
} 

private static void encrypt() throws SodiumLibraryException { 

    System.out.println("----Encrypt-----"); 

    // The salt (probably) can be stored along with the encrypted data 
    byte[] salt = SodiumLibrary.randomBytes(SodiumLibrary.cryptoPwhashSaltBytes()); 
    byte[] key = SodiumLibrary.cryptoPwhashArgon2i(passPhrase, salt); 

    String saltedPrivateKey = new String(key, StandardCharsets.UTF_8); 
    System.out.println("saltedPrivateKey bytes - " + saltedPrivateKey); 
    /** 
    * nonce must be 24 bytes length, so we put int 24 to randomBytes method 
    * **/ 
    byte[] nonce = SodiumLibrary.randomBytes(24); 
    byte[] encryptedPrivateKey = SodiumLibrary.cryptoSecretBoxEasy(privateKey, nonce, key); 
    String encryptedPW = new String(encryptedPrivateKey, StandardCharsets.UTF_8); 
    System.out.println("encryptedPrivateKey bytes - " + encryptedPW); 
} 

private static void decrypt() throws SodiumLibraryException { 

    System.out.println("----Decrypt-----"); 

    byte[] salt = SodiumLibrary.randomBytes(SodiumLibrary.cryptoPwhashSaltBytes()); 
    byte[] key = SodiumLibrary.cryptoPwhashArgon2i(passPhrase, salt); 
    byte[] nonce = SodiumLibrary.randomBytes(24); 
    byte[] encryptedPrivateKey = SodiumLibrary.cryptoSecretBoxEasy(privateKey, nonce, key); 
    privateKey = SodiumLibrary.cryptoSecretBoxOpenEasy(encryptedPrivateKey, nonce, key); 

    String dencryptedPW = new String(privateKey, StandardCharsets.UTF_8); 
    System.out.println("our secret phrase - " + dencryptedPW); 

    } 
}