我试图用密钥"hello"加密普通数据"01234567891234567890123456789012",但问题是加密的代码与网上参考资料不一样。
下面是我编写的android代码:
String smykey = "01234567891234567890123456789012";
String hellos = "hello";
SecretKeySpec key = new SecretKeySpec(smykey.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES");//("AES/ECB/PKCS7Padding");//("ECB");//("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(hellos.getBytes());代码产生,
android: 0x25 0x66...0x2d 0x87 (32 bytes)
ref: 0xa3 0xef...0x68 0x9f (16 bytes)这个Android代码怎么了?我很感激你的帮助?
发布于 2016-03-04 02:51:35
在线引用正在做一些不同的事情,Android代码生成正确的加密数据。
数据hellos不是块大小的倍数(16字节),因此必须指定填充(PKCS#7)。
安卓系统使用的是PKCS#7填充,25669d21 dfd0fd6f cfef6cce 4ef12d87是使用256位键、欧洲央行模式和PKCS#7填充的正确结果。
用UTF-8编码将smykey和hellos转换为数据.
这是一个罕见的情况下,欧洲央行模式是使用,它是不安全的,使用CBC模式与随机iv (将iv与加密的数据)。解密时不要返回填充错误。
使用HMAC或更好的密钥扩展函数(如PBKDF2 )安全地将字符串密码用于安全加密密钥。直接使用字符串作为密钥是不安全的。
https://stackoverflow.com/questions/35786839
复制相似问题