2015-07-25 4 views
0

В моей программе мне пришлось зашифровать дополнительный текст, введенный пользователем ключом AES, а затем зашифровать этот ключ открытым ключом RSA и, конечно же, расшифровать его позже с помощью закрытого ключа. Все, что работает, но то, что я не могу заставить работать, - генерировать хеш-значение из этой введенной строки в конце. Я несколько раз искал поиски в Интернете, но я не могу найти, что я делаю неправильно. AНеспособность генерировать значение хэша

Вот мой код, но не весь, только те части, где у меня проблемы , и вот где я создаю строку inputText1, где пользователь вводит все, что ему нравится.

Cipher aesCipher = Cipher.getInstance("AES"); 
aesCipher.init(Cipher.ENCRYPT_MODE, aesSecretKey); 
String inputText1 = JOptionPane.showInputDialog("Enter a secret message: "); 
byte[] encrypt = aesCipher.doFinal(inputText1.getBytes()); 

А потом MessageDigest где я использую эту строку еще раз, но он не работает и не печатается хэш-значение строки. Что может быть неправильным? Я думал о размере байта, но это не так, как им, используя огромный объем памяти. Любой совет?

public static void getHashfromString(String inputText1) throws NoSuchAlgorithmException 
{ 
    MessageDigest mdigest = MessageDigest.getInstance("MD5"); 
    mdigest.update(inputText1.getBytes()); 
    byte[] HashBytes = mdigest.digest(); 
    JOptionPane.showMessageDialog(null,"HashBytes" + new BigInteger(HashBytes)); 
    System.exit(0); 
} 
+0

Пожалуйста, прочтите http://stackoverflow.com/editing-help, чтобы вы могли более четко форматировать свой код для начала в будущем. –

+0

будет делать @JonSkeet, но хотя мой код не отформатирован хорошо, я мог бы надеяться, что некоторые советы помогут решить мою проблему? – Patricia6946

+0

Ну, «это не работает» на самом деле не говорит нам многого. Я бы посоветовал вам не называть 'getBytes' без предоставления кодировки, хотя ... –

ответ

0

Если вы хотите, чтобы ваш значение хэш превращена в использовании BigInteger:

BigInteger biginteger = new BigInteger(javax.xml.bind.DatatypeConverter.printHexBinary(HashBytes), 16) 

Однако, если вы хотите, чтобы md5 должен быть в шестнадцатеричном и превращается в строку:

String hash = javax.xml.bind.DatatypeConverter.printHexBinary(bytes).toString(); 

В случае, если я сказал что-то не так, это потому, что я немного высоко сейчас.

+0

lol у вас хорошая суббота, насколько я могу видеть :) Большое спасибо, загляните в ваш совет @fihdi – Patricia6946

+0

'BigInteger biginteger = new BigInteger (javax.xml.bind.DatatypeConverter.printHexBinary (HashBytes), 16) 'похоже на« новый BigInteger (1, HashBytes) »для меня (но у меня есть вино: P). –