当前位置: 首页 > 面试题库 >

如何在python中制作PKCS8 RSA签名

潘自强
2023-03-14
问题内容

我有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中编码签名

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



 类似资料:
  • 问题内容: 假设我有一个文件。我怎么写“你好” TAB“ alex”? 问题答案: 这是代码: 字符串的内部是水平制表符的转义序列。

  • 问题内容: 我在Heroku(Cedar stack)上安装了python / django应用程序,并希望仅通过https进行访问。我已启用“ ssl搭载”选项,并且可以通过https连接到它。 但是,禁用http访问或重定向到https的最佳方法是什么? 问题答案: 当请求为ssl时,Heroku将HTTP_X_FORWARDED_PROTO设置为https,我们可以使用它来检查:

  • 问题内容: 我有一个字符串,一个签名和一个公共密钥,我想验证字符串上的签名。密钥如下所示: 我已经阅读了一段时间的pycrypto文档,但是我不知道如何使用这种密钥制作RSAobj。如果您了解PHP,我将尝试执行以下操作: 另外,如果我对任何术语感到困惑,请告诉我。 问题答案: 标记之间的数据是包含PKCS#1 RSAPublicKey的PKCS#8 PublicKeyInfo的ASN.1 DER

  • 问题内容: 是2D数组。我想要一个新变量,其值与数组相同。此外, 使用Y进行的任何其他操作都不应影响X的值。 在我看来使用起来很自然。但是它不适用于数组。如果我这样做,然后更改y,x也会更改。我发现问题可以这样解决: 但是它不适用于2D阵列。例如: 返回。如果我替换为,这也无济于事。 有人知道什么是正确且简单的方法吗? 问题答案: 尝试这个: 我不确定,也许就足够了。

  • 问题内容: 喜欢标题中的内容如何对.txt文件进行过滤? 我写了这样的东西,但有错误:( 问题答案: 在这里,您将找到一些工作示例。这也是JFileChooser中使用的FileFilter的一个很好的示例。 基础是,您需要重写FileFilter类,并在其accpet方法中编写自定义代码。上例中的accept方法是根据文件类型进行过滤: 或更简单易用的是FileNameFilter,它具有以fi

  • 问题内容: 我想让一个微调框输入时间,就像这样:YoutubeVidéo 如果有人知道源代码隐藏在哪里,那将是完美的。但是,如果没有,我想尝试自己实现,但是我该如何使3个不同的(可聚焦的)文本区域像这样? 编辑:这是我所得到的,但是我希望能够选择小时数并增加小时数,而不仅仅是分钟数(和c的秒数相同) 这是我得到的结果: 谢谢 问题答案: 我认为选择编辑器各个部分的最佳方法是检查编辑器中的内容,并根