[英]Java SHA1 output not the same as Linux's sha1sum command
我已经尝试了以下代码来生成String的SHA1摘要:
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中的sha1sum
命令运行相同的输入字符串不同 - > echo test|sha1sum
。
Java代码输出为“test” - > a94a8fe5ccb19ba61c4c0873d391e987982fbbd3
sha1sum在linux终端中为“test” - > 4e1243bd22c66e76c2ba9eddc1f91394e57f9f83
MessageDigest
类和Linux的sha1sum
实用程序是否实现相同的算法? 问题是如何在Linux下使用带有echo的sha1sum
。 它包括换行。 将其拆分为以下步骤:
echo test > somefile
sha1sum somefile
会告诉你同样的结果...但如果你看看somefile
你会看到它的5个字节长,而不是4.编辑它摆脱尾随换行符,运行sha1sum
再次,你会看到同样的答案是Java给出了。
如果对echo
使用-n
选项,则应该没问题:
$ echo -n test | sha1sum
a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 -
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.