Java SHA1 output not the same as Linux's sha1sum command
我尝试了以下代码来生成String的SHA1摘要:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Formatter; public class SHA1 { private static String encryptPassword(String password) { String sha1 =""; try { MessageDigest crypt = MessageDigest.getInstance("SHA-1"); crypt.reset(); crypt.update(password.getBytes("UTF-8")); sha1 = byteToHex(crypt.digest()); } catch(NoSuchAlgorithmException e) { e.printStackTrace(); } catch(UnsupportedEncodingException e) { e.printStackTrace(); } return sha1; } private static String byteToHex(final byte[] hash) { Formatter formatter = new Formatter(); for (byte b : hash) { formatter.format("%02x", b); } String result = formatter.toString(); formatter.close(); return result; } public static void main(String args[]){ System.out.println(SHA1.encryptPassword("test")); } } |
这段代码是基于这个问题和另一个问题的。 请注意,这不是这些问题的重复,因为它们与格式化输出有关。
问题在于,它产生的结果与在Linux->
"测试"的Java代码输出->
Linux终端中的sha1sum用于"测试"->
- 他们为什么不一样?
-
Java的
MessageDigest 类和Linux的sha1sum 实用程序是否实现相同的算法?
问题是您如何在Linux下使用带有回显的
1 2 | echo test > somefile sha1sum somefile |
将显示相同的结果...但是,如果您查看
如果对
1 2 | $ echo -n test | sha1sum a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 - |