gpt4 book ai didi

java - 相当于MySQL aes_encrypt()函数的AES加密方式

转载 作者:行者123 更新时间:2023-11-29 01:16:56 33 4
gpt4 key购买 nike

我想写一个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);

最佳答案

MySQL对AES的实现让很多人头疼。这主要是因为 MySQL 如何处理加密 key 。加密 key 被分成 16 字节的 block ,MySQL 会将一个 block 中的字节与前一个 block 中的字节进行异或。如果用户提供的 key 的长度恰好小于 16 个字节,则该 key 基本上用空字节填充以达到 16 个字节。 MySQL 的 aes_encrypt() 就是这样处理 key 的。

还通过使用 PKCS7 填充数据来处理要加密的值。您可以在 http://en.wikipedia.org/wiki/Padding_%28cryptography%29#PKCS7 了解有关 PKCS7 的所有信息但它所做的只是填充输入数据,使其位于 16 字节 block 中。数据填充的字节等于将添加的填充字节数。

长话短说,您需要像 MySQL 那样处理加密 key ,并使用 PKCS7 填充输入数据。

有关 Java 中的示例代码,请参阅 Michael Simmons 的以下帖子: http://info.michael-simons.eu/2011/07/18/mysql-compatible-aes-encryption-decryption-in-java/

关于java - 相当于MySQL aes_encrypt()函数的AES加密方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19518447/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com