gpt4 book ai didi

java - 生成 MD5 哈希值

转载 作者:行者123 更新时间:2023-12-01 23:41:07 25 4
gpt4 key购买 nike

我收到了一个密码,该密码使用 AES 和基于数字 ID 的 MD5 哈希进行加密

从请求中,我可以获取数据库中的 id 以及其他属性因此,在服务器端,我需要获取 id,根据该 id 获取 MD5 哈希值,并使用 AES 算法和生成的 MD5 哈希值解密密码。

我使用以下代码来获取 MD5 哈希

 try {
byte[] bytesOfMessage = id.getBytes("UTF-8");
log.error "bytesOfMessage length: " + bytesOfMessage.length
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);

md5Value = new String(thedigest);
log.error "md5Value length: " + md5Value.length()
log.error "md5Value bytes length: " + md5Value.getBytes().length
} catch (UnsupportedEncodingException e) {
log.error "[getMD5EncryptionKey]UnsupportedEncodingException: " + e;
} catch (NoSuchAlgorithmException e) {
log.error "[getMD5EncryptionKey]NoSuchAlgorithmException: " + e;
}

基于 id 1,md5Value 长度为 16,但是当我从此 md5value 获取字节时,有 34 个字节

当我使用 MD5 哈希和 javax.crypto.Cipher 库解密密码时,我收到以下消息

java.security.InvalidKeyException:无效的 AES key 长度:34 字节

知道我在这里做错了什么吗?

我用来解密消息的代码如下

  try {
byte [] encryptionKeyBytes = md5EncryptionKey.getBytes("UTF-8");
Key key = new SecretKeySpec(encryptionKeyBytes, "AES");
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.DECRYPT_MODE, key);
byte[] decodedValue = new Base64().decode(encryptedData);
byte[] decValue = c.doFinal(decodedValue);
String decryptedValue = new String(decValue);
return decryptedValue;
} catch (InvalidKeyException e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
} catch (IllegalBlockSizeException e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
} catch (BadPaddingException e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
} catch (NoSuchAlgorithmException e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
} catch (NoSuchPaddingException e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
} catch (Exception e) {
log.error "[getDecryptedValue] InvalidKeyException: " + e
}

最佳答案

问题是字符串是十六进制的。我建议您使用 apache commons-code 包。这里有一个用于哈希的实用程序类。

http://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html

然后您可以使用以下代码:

String md5 = DigestUtils.md5Hex(id);
// or
byte[] md5 = DigestUtils.md5(id);

关于java - 生成 MD5 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946810/

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