繁体   English   中英

Java SHA1输出与Linux的sha1sum命令不同

[英]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

  • 他们为什么不一样?
  • Java的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM