使用 PKCS#8 编码的私钥创建兼容的 Java“RSA”签名

2023-12-13

我有 pkcs8_rsa_private_key 文件,它是由 openssl 从 rsa_private_key.pem 文件生成的。

我需要在python中通过私钥进行签名,使用下面的java代码进行相同的签名。

public static final String SIGN_ALGORITHMS = "SHA1WithRSA";

public static String sign(String content, String privateKey) {
    String charset = "utf-8";
    try {
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
                Base64.decode(privateKey));
        KeyFactory keyf = KeyFactory.getInstance("RSA");
        PrivateKey priKey = keyf.generatePrivate(priPKCS8);

        java.security.Signature signature = java.security.Signature
                .getInstance(SIGN_ALGORITHMS);

        signature.initSign(priKey);
        signature.update(content.getBytes(charset));

        byte[] signed = signature.sign();

        return Base64.encode(signed);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;
}

PKCS#8 定义了一种编码和传输密钥的方法,它并非特定于 OpenSSL; PKCS#1 定义了一种使用 RSA 密钥(无论它如何加载到应用程序中,无论是否使用 PKCS#8)来执行和验证数据数字签名的方法。

您拥有的这段代码做了三件事:

  1. 它将 Base64 解码为 PKCS#8
  2. 它将 PKCS#8 解码为内存中的实际密钥(请注意,您可能需要在此处提供密码)
  3. 它使用所述密钥使用 SHA-1 执行 PKCS#1 v1.5 签名
  4. 它对签名进行 Base64 编码

The PyCrypto API 中的 PKCS#1 v1.5 签名示例完全执行步骤 #2 和 #3。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PKCS#8 编码的私钥创建兼容的 Java“RSA”签名 的相关文章

随机推荐