使用RSASSA-PKCS1-V1_5使用私钥对有效负载进行数字签名

时间:2017-05-23 08:50:13

标签: java hash cryptography digital-signature sha1

我试图插板并实施以下声明。

  

使用私钥对有效负载进行数字签名    RSASSA-PKCS1-V1_5 签名方案和 SHA1 加密哈希函数。

注意:请参阅PKCS#1 v2.1:PKCS1-v1.5签名和加密方案的RSA加密标准规范。

当它说"和#34;时我很困惑。 sha1哈希函数,下面是采用的代码,我不确定它是否是正确的解释

    public String getSignature(String _plainTextMessage,PrivateKey privateKey){

        try {
            Signature signer = Signature.getInstance("SHA1withRSA");
            signer.initSign(privateKey);
            signer.update(_plainTextMessage.getBytes());
            byte[] signature = signer.sign();
            return new BASE64Encoder().encode(signature);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (SignatureException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
}

或者我是否需要包含MessageDiget,如下所示

public String getSignature(String _plainTextMessage,PrivateKey privateKey){
try {
    Signature signer = Signature.getInstance("SHA1withRSA");
    signer.initSign(privateKey);
    signer.update(_plainTextMessage.getBytes());
    byte[] signature = signer.sign();

    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
    byte[] digest = sha1.digest(signature);

    return new BASE64Encoder().encode(digest);

} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (InvalidKeyException e) {
    e.printStackTrace();
} catch (SignatureException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}
return null;

}

我将感谢任何提示,如果适用,如果我使用第二个选项,我如何验证签名。

感谢

1 个答案:

答案 0 :(得分:0)

第一个选项有意义,第二个选项没什么意义;您需要第一个选项:只使用SHA1withRSA

计算哈希是签名生成操作的一部分。签名生成操作允许您配置特定哈希的签名操作,例如SHA-1或SHA-256。这是您指定SHA1withRSA时执行的操作。它正在使用PKCS#1 v1.5填充隐式,因为在他们编写函数时,只有一个被广泛标准化的方案。

在你的第二段代码中,你勾勒出签名。这很有趣,但它不允许您使用公钥验证签名。这就是为什么你首先要生成签名的原因。请注意,如果您使用不同的不确定签名方案(如PSS),则每次都会获得不同的哈希,使第二个方案完全无效。

请注意,通常SHA-1不再被认为是安全的,特别是签名生成的情况。只有当signatue算法(和底层哈希算法)的输入受到限制时,它才能被认为是安全的。