带有salt用于散列的SHA-256在java中为签名生成不同的值

时间:2017-07-05 08:14:46

标签: sha256

我们必须使用SHA-256和随机盐并使用10000次迭代来构建一个签名字符串哈希。但是,当我使用salt运行下面的代码时,输​​出哈希值根本不匹配相同的输入字符串。如果我运行没有salt的代码,则散列值匹配。有人可以指出向SHA-256摘要添加随机盐的正确方法,并获得下面的firstValue / secondValue。

import java.security.MessageDigest;
import java.security.SecureRandom;
import org.springframework.security.crypto.codec.Hex;

public class someTester{

    public static void main(String[] args) {
        String signatureInput = "someStringWhichisSensitive";
        String firstSignValue = getSignature(signatureInput);
        String secondSignValue = getSignature(signatureInput);
        System.out.println("firstSignValue="+firstSignValue);
        System.out.println("secondSignValue="+secondSignValue);
    }

    private static String getSignature(String signatureInput){
        MessageDigest md;
        String signatureValue = null;
        try {
            // Create a random salt
            SecureRandom sr = new SecureRandom();
            byte[] bSalt = new byte[8];
            sr.nextBytes(bSalt);
            md = MessageDigest.getInstance("SHA-256");
//          digest.update(bSalt);

            byte[] bDigest = md.digest(signatureInput.getBytes());
            // Iterate through 10000 times
            for (int i = 0; i < 10000; i++) {
                bDigest = md.digest(bDigest);
            }
            signatureValue = new String(Hex.encode(bDigest));
        } catch (Exception e) {
            System.out.println("Exception while calculating SHA-256 digest value"+e);
        }
        return signatureValue;
    }
}

0 个答案:

没有答案