use*_*996 2 java mysql encryption aes
我想写一个AES加密方法,它应该等同于mysql aes_encrypt.
我尝试写但是它不正确,因为mysql也没有给出正确的数据.
我该怎么做才能使它正确?
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] encryptedTextBytes = cipher.doFinal(message .getBytes("UTF-8"));
String k = new String(encryptedTextBytes);
System.out.println("KKKKK"+k);
Run Code Online (Sandbox Code Playgroud)
小智 7
MySQL的AES实现给很多人带来了麻烦.这主要是因为MySQL如何处理加密密钥.加密密钥被分成16字节块,MySQL将从一个块中对前一个块中的字节进行异或.如果用户提供的密钥长度小于16个字节,那么密钥基本上用空字节填充以获得最多16个字节.这就是MySQL的aes_encrypt()处理密钥的方式.
通过使用PKCS7填充数据,还处理要加密的值.您可以了解PKCS7 @ http://en.wikipedia.org/wiki/Padding_%28cryptography%29#PKCS7的所有内容,但它所做的只是填充输入数据,因此它是16字节块.数据被填充的字节等于将要添加的填充字节数.
简而言之,您需要像MySQL一样处理加密密钥,并使用PKCS7填充输入数据.
请参阅Michael Simmons的以下帖子,了解Java中的示例代码:http: //info.michael-simons.eu/2011/07/18/mysql-compatible-aes-encryption-decryption-in-java/
| 归档时间: |
|
| 查看次数: |
3570 次 |
| 最近记录: |