我需要加密密码我正在使用this教程
我需要将加密的密码存储在sql数据库中作为字符串,当我尝试读取并将字符串转换为byte []我有问题时,byte []与原始加密字节[]
byte[] encrypted = encryper.encrypte("pavel");
Log.i("info","encrypted : "+encrypted);
String pass = String.valueOf(encrypted);
byte[] passBytes = pass.getBytes();
Log.i("info","passBytes : "+passBytes);
Log.i("info","decrypted : "+encryper.decrypte(passBytes));
日志
I/info: encrypted : [B@3832a394
I/info: passBytes : [B@33deee3d
I/info: decrypted :
解密方法
public String decrypte(byte[] text)
{
byte[] textDecrypted = new byte[0];
try {
cipher.init(Cipher.DECRYPT_MODE, myDesKey);
textDecrypted = cipher.doFinal(text);
Log.i("info","do final : "+textDecrypted);
}catch (InvalidKeyException e) {e.printStackTrace();
}catch (IllegalBlockSizeException e){e.printStackTrace();}
catch (BadPaddingException e){e.printStackTrace();}
return new String(textDecrypted);
}
但如果我写公共字符串decrypte(byte [] text) {
byte[] textDecrypted = new byte[0];
try {
cipher.init(Cipher.DECRYPT_MODE, myDesKey);
textDecrypted = cipher.doFinal(text);
Log.i("info","do final : "+textDecrypted);
}catch (InvalidKeyException e) {e.printStackTrace();
}catch (IllegalBlockSizeException e){e.printStackTrace();}
catch (BadPaddingException e){e.printStackTrace();}
return new String(textDecrypted);
}
但如果我把原始字节[]全部工作
encryper.decrypte(encrypted)
答案 0 :(得分:2)
我会使用Base64.Encoder(java.util,自Java 8)将字节数组编码为String,然后将其保存到DB,然后将其从DB读取到String并使用Base64.decoder将其解码为字节数组
答案 1 :(得分:1)
您在控制台上看到的内容是toString()
byte[]
方法的结果。它不代表实际内容。相反,它是对象的ID。它们是不同的,因为你有不同的对象。
此外,如果您使用String.valueOf(encrypted)
,它将会回退到valueOf(Object)
method,因为没有valueOf(byte[])
。这不会为您提供数组内容的字符串表示形式,而是由toString()
生成的相同对象ID。
使用例如new String(encrypted)
将字节数组的内容转换为可读字符串。