AES加解密数据丢失
AES encryption and decryption data loss
当我尝试使用 AES ECB 加密密钥的 MD5 散列时,
然后解密它我得到不同的结果:
之前:>•ly†lrœÈGQ2¶ª€
之后:0¦t‹
d)§¥›B?W
我用于加密和解密的代码是:
public class AES {
private String a= "AES/ECB/NoPadding";
private byte[] key;
Cipher c;
public AES(byte [] key) throws NoSuchAlgorithmException, NoSuchPaddingException{
this.key = key;
c = Cipher.getInstance(a);
}
public String encrypt(byte[] Data) throws Exception{
Key k = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encoded = c.doFinal(Data);
String encrypted= new String(encoded);
return encrypted;
}
public String decrypt(byte[] v) throws Exception{
Key k = new SecretKeySpec(key, "AES");
if(v.length%16!=0)
return null;
c.init(Cipher.DECRYPT_MODE, k);
byte[] decv = c.doFinal(v);
String decrypted = new String(decv);
return decrypted;
}
}
如果在加密实现中将字符串与十六进制或二进制组合在一起,转换很可能会失败。
这不起作用:
String encrypted= new String(encoded);
encoded
中的密文字节是伪随机乱码。无论您的平台默认值如何,它们都不太可能形成有效的文本编码。
如果您需要文本表示,请使用 base-64 编码:
String encrypted = Base64.getEncoder().encodeToString(encoded);
这是一个常见的错误,尽管它以不同的方式表现出来,因此 "questions" 是多种多样的,很难识别为重复项。 更详细。
当我尝试使用 AES ECB 加密密钥的 MD5 散列时, 然后解密它我得到不同的结果:
之前:>•ly†lrœÈGQ2¶ª€
之后:0¦t‹ d)§¥›B?W
我用于加密和解密的代码是:
public class AES {
private String a= "AES/ECB/NoPadding";
private byte[] key;
Cipher c;
public AES(byte [] key) throws NoSuchAlgorithmException, NoSuchPaddingException{
this.key = key;
c = Cipher.getInstance(a);
}
public String encrypt(byte[] Data) throws Exception{
Key k = new SecretKeySpec(key, "AES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encoded = c.doFinal(Data);
String encrypted= new String(encoded);
return encrypted;
}
public String decrypt(byte[] v) throws Exception{
Key k = new SecretKeySpec(key, "AES");
if(v.length%16!=0)
return null;
c.init(Cipher.DECRYPT_MODE, k);
byte[] decv = c.doFinal(v);
String decrypted = new String(decv);
return decrypted;
}
}
如果在加密实现中将字符串与十六进制或二进制组合在一起,转换很可能会失败。
这不起作用:
String encrypted= new String(encoded);
encoded
中的密文字节是伪随机乱码。无论您的平台默认值如何,它们都不太可能形成有效的文本编码。
如果您需要文本表示,请使用 base-64 编码:
String encrypted = Base64.getEncoder().encodeToString(encoded);
这是一个常见的错误,尽管它以不同的方式表现出来,因此 "questions" 是多种多样的,很难识别为重复项。