【问题标题】:Digitally sign the payload with Private Key using RSASSA-PKCS1-V1_5使用 RSASSA-PKCS1-V1_5 使用私钥对有效负载进行数字签名
【发布时间】:2017-10-23 03:01:54
【问题描述】:

我正在尝试插入并实现以下语句。

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

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

当它说“和”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;

}

我会很感激任何提示,如果适用,如果我使用第二个选项,我该如何验证签名。

谢谢

【问题讨论】:

    标签: java hash cryptography digital-signature sha1


    【解决方案1】:

    第一个选项有意义,第二个选项意义不大;你需要第一个选项:只使用SHA1withRSA

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

    在您的第二段代码中,您对签名进行哈希处理。这很有趣,但它不允许您使用公钥验证签名。这就是您首先生成签名的原因。请注意,如果您使用不同的不确定签名方案(例如 PSS),您每次都会得到不同的哈希值,从而使您的第二个方案完全无用。


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

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 2017-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2023-04-02
      • 2021-09-18
      • 2019-08-24
      相关资源
      最近更新 更多