AES加密方法相当于MySQL aes_encrypt()函数

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/