【问题标题】:Failing to generate a hash value未能生成哈希值
【发布时间】:2015-10-16 07:18:17
【问题描述】:

在我的程序中,我必须使用 AES 密钥加密用户输入的可选文本,然后使用 RSA 公钥加密该密钥,当然稍后再使用私钥对其进行解密。所有这些都有效,但我无法开始工作的是从最后输入的字符串生成一个哈希值。 我已经在谷歌上搜索了几天,但我找不到我做错了什么。一个

这是我的代码,但不是全部,只是我遇到问题的部分 这就是我创建字符串 inputText1 的地方,用户可以在其中输入他喜欢的任何内容。

Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, aesSecretKey);
String inputText1 = JOptionPane.showInputDialog("Enter a secret message: ");
byte[] encrypt = aesCipher.doFinal(inputText1.getBytes());

然后是我再次使用该字符串的消息摘要,但它不起作用并且不打印字符串的任何哈希值。有什么问题?我在考虑字节大小,但它不像我使用大量内存。有什么建议吗?

public static void getHashfromString(String inputText1) throws  NoSuchAlgorithmException
{
    MessageDigest mdigest = MessageDigest.getInstance("MD5");
    mdigest.update(inputText1.getBytes());
    byte[] HashBytes = mdigest.digest(); 
    JOptionPane.showMessageDialog(null,"HashBytes" + new BigInteger(HashBytes));  
    System.exit(0);
}

【问题讨论】:

  • 请阅读stackoverflow.com/editing-help,以便您可以更易读地格式化您的代码,以便将来开始使用。
  • 会做@JonSkeet,但即使我的代码格式不正确,我也希望能就我的问题得到一些建议?
  • 好吧,“它不起作用”并不能真正告诉我们太多。我建议您不要在不提供编码的情况下致电getBytes...
  • 我确实写过它没有打印出哈希值,我的问题不是很清楚吗?我没有收到任何错误,感谢@JonSkeet 的建议
  • 那么它会打印出什么? MD5 与您在第一段中描述的内容有什么关系?

标签: java hash cryptography md5


【解决方案1】:

如果您希望将哈希值转换为 BigInteger,请使用:

BigInteger biginteger = new BigInteger(javax.xml.bind.DatatypeConverter.printHexBinary(HashBytes), 16)

但是,如果您希望 md5 必须为十六进制并转换为字符串:

String hash = javax.xml.bind.DatatypeConverter.printHexBinary(bytes).toString();

万一我说错了,那是因为我现在有点高。

【讨论】:

  • 哈哈,就我所知,你周六过得愉快 :) 非常感谢,我会考虑你的建议 @fihdi
  • BigInteger biginteger = new BigInteger(javax.xml.bind.DatatypeConverter.printHexBinary(HashBytes), 16) 对我来说似乎与 new BigInteger(1, HashBytes) 相同(但我正在喝葡萄酒:P)。
猜你喜欢
  • 1970-01-01
  • 2015-06-28
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-20
相关资源
最近更新 更多