我正在尝试用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吗?还是我这样做完全错了?
toSHA1("password".getBytes())
[锟絘锟缴�??锟�%l锟�3~锟斤拷.
5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8
更新 您可以使用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 有这个很好的实用程序来消除所有的痛苦。参考这里