小编典典

Java 字符串到 SHA1

all

我正在尝试用Java制作一个简单的字符串到SHA1转换器,这就是我所拥有的......

public static String toSHA1(byte[] convertme) {
    MessageDigest md = null;
    try {
        md = MessageDigest.getInstance("SHA-1");
    }
    catch(NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    return new String(md.digest(convertme));
}

当我通过它时toSHA1("password".getBytes())[锟絘锟缴�??锟�%l锟�3~锟斤拷.我知道它可能是一个简单的编码修复,如
UTF-8,但有人可以告诉我应该怎么做才能得到我想要的东西5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8吗?还是我这样做完全错了?


阅读 76

收藏
2022-08-24

共1个答案

小编典典

更新
您可以使用Apache Commons Codec(版本 1.7+)为您完成这项工作。

[DigestUtils.sha1Hex(stringToConvertToSHexRepresentation)](https://commons.apache.org/proper/commons-codec/apidocs/org/apache/commons/codec/digest/DigestUtils.html#sha1Hex\(java.lang.String\))

感谢@的建议。


旧答案
将您的字节数组转换为十六进制字符串。Real’s How To
告诉你如何

return byteArrayToHexString(md.digest(convertme))

和(从 Real’s How To 复制)

public static String byteArrayToHexString(byte[] b) {
  String result = "";
  for (int i=0; i < b.length; i++) {
    result +=
          Integer.toString( ( b[i] & 0xff ) + 0x100, 16).substring( 1 );
  }
  return result;
}

顺便说一句,您可以使用 Base64 获得更紧凑的表示。 Apache Commons Codec API 1.4
有这个很好的实用程序来消除所有的痛苦。参考这里

2022-08-24