如何在java中使用哈希sha256生成哈希码?

2 java hash sha256

我想知道在java中执行此操作的代码吗?

这是我到目前为止所拥有的,但它不起作用?

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import static jdk.nashorn.tools.ShellFunctions.input;

public class Sha256hash 
{

    public static String main(String[] args) throws NoSuchAlgorithmException 
    {
        MessageDigest md = MessageDigest.getInstance("SHA1");
            md.reset();
            byte[] buffer = input.getBytes("UTF-8");
            md.update(buffer);
            byte[] digest = md.digest();

            String hexStr = "";
            for (int i = 0; i < digest.length; i++) {
                hexStr +=  Integer.toString( ( digest[i] & 0xff ) + 0x100, 16).substring( 1 );
            }
            return hexStr;
    }

}
Run Code Online (Sandbox Code Playgroud)

Ell*_*sch 6

我还不清楚你想要 SHA-1还是SHA-256,所以让我们抽象一下问题;首先,一个编码方法来获取 abyte[]并返回十六进制(别担心,你已经写了它;但我更喜欢StringBuilder过度String连接。JavaString不可变的,所以你正在为以后的垃圾收集创建垃圾+) -

private static String encodeHex(byte[] digest) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < digest.length; i++) {
        sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1));
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

接下来,我们可以创建一个方法,该方法接受算法名称和String摘要并返回该摘要。喜欢

public static String digest(String alg, String input) {
    try {
        MessageDigest md = MessageDigest.getInstance(alg);
        byte[] buffer = input.getBytes("UTF-8");
        md.update(buffer);
        byte[] digest = md.digest();
        return encodeHex(digest);
    } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
        e.printStackTrace();
        return e.getMessage();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以得到一个SHA-1 一个SHA-256散列

public static void main(String[] args) {
    System.out.println(digest("SHA1", ""));
    System.out.println(digest("SHA-256", ""));
}
Run Code Online (Sandbox Code Playgroud)

哪些输出(如预期)

da39a3ee5e6b4b0d3255bfef95601890afd80709
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Run Code Online (Sandbox Code Playgroud)