加密字符串到 byte[]
Encrypted String to byte[]
我需要加密我正在使用的密码 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);
}
但是如果我写 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);
}
但如果我把原始字节[]全部工作
encryper.decrypte(encrypted)
您在控制台上看到的是 byte[]
的 toString()
方法的结果。不代表实际内容。相反,它是对象的 ID。它们是不同的,因为你有不同的对象。
此外,如果您使用 String.valueOf(encrypted)
,它将返回到 valueOf(Object)
method,因为没有 valueOf(byte[])
。这给你的不是数组内容的字符串表示,而是 toString()
.
生成的相同对象 ID
使用例如new String(encrypted)
将字节数组的内容转换为可读的字符串。
我会使用 Base64.Encoder(java.util,因为 Java 8)将字节数组编码为字符串,然后将其保存到数据库,然后从数据库读取到字符串并解码它使用 Base64.decoder
到字节数组
我需要加密我正在使用的密码 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);
}
但是如果我写 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);
}
但如果我把原始字节[]全部工作
encryper.decrypte(encrypted)
您在控制台上看到的是 byte[]
的 toString()
方法的结果。不代表实际内容。相反,它是对象的 ID。它们是不同的,因为你有不同的对象。
此外,如果您使用 String.valueOf(encrypted)
,它将返回到 valueOf(Object)
method,因为没有 valueOf(byte[])
。这给你的不是数组内容的字符串表示,而是 toString()
.
使用例如new String(encrypted)
将字节数组的内容转换为可读的字符串。
我会使用 Base64.Encoder(java.util,因为 Java 8)将字节数组编码为字符串,然后将其保存到数据库,然后从数据库读取到字符串并解码它使用 Base64.decoder
到字节数组