【问题标题】:python - cryptography - generate new RSA private keypython - 密码学 - 生成新的 RSA 私钥
【发布时间】:2019-06-18 00:38:13
【问题描述】:

我需要一个函数来生成一个新的 RSA 私钥,然后可以将它作为字符串存储在 Django 模型字段中。 我正在使用cryptography==2.1.4

虽然我通过以下方式实现了这一点:

from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend

KEY_SIZE = 2048
PUBLIC_EXP = 65537
private_key = rsa.generate_private_key(
    public_exponent=PUBLIC_EXP,
    key_size=KEY_SIZE,
    backend=default_backend()
)
private_key_str = private_key.private_bytes(
    encoding=serialization.Encoding.PEM,
    format=serialization.PrivateFormat.TraditionalOpenSSL,
    encryption_algorithm=serialization.NoEncryption()
).decode()

但显然我在这里遗漏了一些东西或一些步骤(虽然我应该知道为什么......)因为private_key_str 始终具有相同的值。

这里有什么建议吗?

【问题讨论】:

    标签: python python-3.x cryptography rsa python-cryptography


    【解决方案1】:

    我用密码学==2.1.4 尝试您的代码,我发现private_key_str 不一样。我想也许你没有仔细比较这两个字符串。

    它们都使用 PEM 编码的 PKCS#1 结构来编码密钥,因此它们只是具有相似的结构。

    private_key1

    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAspdHsnVqiY0RFYVAHcqa9AQvZC4u7gGv36wWCEUIlemJx2L7
    1UvAbD5b/n/RPp4nw2xTIpSFguC+d4t5IaomQR7WR0aCcWda9SveNk4KyJmnHUox
    Z6BBz4vBhdLWLLwZwxGsmuml60Wv5JMVEbf0lDgZqjIBMH0W5hFxa6f3AvI2L2Xf
    LzwhfcyDMBIENx47aDFyWwfJvkIotFcLS9gYvo5KQXCdoHMbkoygF2cF+JAfSPEb
    HaRw0qCOIDb0pC/L8HUxyiSeGH9eu93KyweRTqoXdkWdmKLYlJHUsdv24xrUxeA3
    rARho2flkL/kz6AKO4NJJy+pvDCCtk8PW+HnTwIDAQABAoIBAD8587Yof5lHCf9W
    d4aUjhtJyAVtnEvC6SME55/x4MJCNfcTAhlXgj5QLX2Cfu/uSiGTnjMl5caaDpSA
    GlhixrxTUIVXXyMK9lbKOxd6tbKjQ1jJRYhsYiA6WD8qj4yy42P+Q99sTMNonocL
    02+8cqhu3Bc3MNib0JmPH1p/0qGFy1BsKVUAajiOfFAA8phKyBa1gRON8CtDihLc
    oTFfr5b3oaYCBsfA/YYnvf0fEsBrX/xPKVqG5NRVg0dT9op6Z+PBWOZeqSEIk0OV
    KNuFTB/xP7oLJgjO6A9upnSHauFZu0sT9UXa9PdTfb8H6zaRwwwqsbCljG0jHUdo
    /FcJF8ECgYEA3TbmmkVVX5no6jC1b0bAoWfgqvCLEoBAXEKIbLEYrQ9snfB0bHR8
    vS/XydhUvD2Ysf/J+hEHQg8ScQgrOUkkpl2Az88pN17eYIA/i1/yJ6rL2Ju/qOcN
    Omo+Zk8sZR3xLt5zXqeNuC7UkuQVg0aQ1JDxszZEkFCf/Wwq64AsoBECgYEAzqyM
    UEPwFAj/gL2LM/DFDDnZT2z4NMS6y0rqzHAPcn7hJGjG6dp4o3cEJPM3GObKUT3z
    wrzy/Iw6rq7h8DOOHFklt6uAVrrYiFlQ1OSgl/H4a7Ohpi33UjqU3Hy0TFxcBSLy
    xNQAcIqSQHxGs42je4JjLiUX4jNor12fm6j7cV8CgYBUGuyAGP5Fk8nHSG+i+B6C
    /3Ce7Uei6BoQOceOs6JzIdslDWfmWD+Y2ljLyDEnRLAKdPsA1XqR9hMH4Jg2doW1
    rvUrjVLZV3tq6ze9sOPrivdnyoeLGxWfcQd6dH2nkEPDkxYAFeo+7acqlgdL2wdz
    mgwbG/XjfJPnkTmcQiY1UQKBgQCAMEPjcRASzTX02xvhPoBpwePIwNT+ndsiRrh1
    zze1k37/v0FJQSm8chCO/o/5EQUB+QQdkGbCQBQRzwTyoHePm7eqQWSb5s5xW7yo
    H5qARCQKYWNtGGujhBRa4bpO9qZYxUGA1eHj6/8kojCUI9D3xXrQ307+DVbsFozt
    1pUGzwKBgEKDzYhr1AQjOysqxthRATj+UTPIODFuhUHH9/RowCa9wCWEEKnpv7Wa
    pfmBJd3FkFC4+UQ6b5LyRc4dlMtDh8+GuomUFFPTBrU8oDLzPBZiotIBt1bmd/cq
    JsJbimkNvUXY1XY03VajNbAXdsNDUAgbNx00zuOFvD/66Os0hclD
    -----END RSA PRIVATE KEY-----
    

    private_key2

    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAxJuI29hhZTLyVx/ePLG30I/DrVMUykeV6QeydwDkxRbI/ZKZ
    JhCGyV8NtCyGKHa+vsRjwzzTGgBhpsxMzOwB37liGVlZ/LN0QC5rZ0hR9nVkTted
    H8jkMlwV5/R8nMq35yDAdTtWxF2ngM9OLNDRPmyTa7AA0sZLfYYn8UwKTFikfPZ6
    XLhb0YoApj6hUDAwKPj4rje3VcxVpLpv/Tfr+Z1qw9YSWCcFdLA89ppQqB0/TfZw
    chpCdC5tpmzeucAz2QvuWBe4/LBAJ2vc/Hv4vCztQi2JtN/LJLjfSxdXM1IC4Acu
    BqhdQ3sjkHYscp3TTTeVjuhnL+wF4OqtXejK3wIDAQABAoIBAH960gyqisxRcm0n
    jrQQD7292gUCf9KBBCTrBr6+55cbpQs2CPNzd9IOPhZ7YCnQhPGw6Xboc4DCio7a
    nVmqFbT4wTDqjLybp18OOjnn3K1PhNDSYWEAo2Y760BReJM5pnDI/cGFzkbY6wlM
    YcYRR/uP7y6+GmqQhNZJLJD62xqQovMGxFlmqEEjBnru+5Zabbok7DMgzBXE/T/K
    dNQC7tfm7KRn3eFxYzAlhUsime0/k4eQGJp+XMsI+SqUYQCkKicI/AgNW6nXsGT/
    YMT/B0XDYvT+KCxnhW9pOAof6FbQ8XWrx4VfW73H0TSGtCo4OWi55OoIZDRz/5ff
    b7lsAOECgYEA+HVz6heFNAt4v4cTrXHFZFkBlLoAtm/6NRnDBKHbdg6wmnVV3aJ7
    Z3YdDSNlvmov5whLKwOLZlI0jONeZnKCaJAz8uOYOF8hoMFehurhsJUfHhQLzZVj
    6BD2e62a8R377KFlMIY0JsHWkEwZEQO/KakqdY90xIE7LMTncz9SaHcCgYEAypMx
    aCiyzVAXHMVY9rRLa7Iqdot+OnzF86T7RW/F8T5md3y6lJX2Y1HdHxLDYPm1xXBo
    gg7Du/Eq/+L24YGJzg+CQs00Z3l5mJxt9OSsjuXqFJQqf9PeJUeNkhdY77xuzBfH
    tS2dChmRfwLRqaatYq4RZ4s4tByib/8vjo1RMtkCgYAA5Qth0GveYBwzNF1RxpMb
    ZWaoDnNqNMUF4+3b2mlb53mjVMDWZ3tiR/6ayYHYSbGad2Et6nlaCPm/eCIi5E6r
    6bkGKuOlcFJCre+VNMtTQ3Y1OYVBXERb1ZPNpjZkn+MEWyBuKE2PxirrohqFASpz
    D/TjL30QKBb6dksPEy9MyQKBgQCN7r+pOQq+K6Vl9Se2AvDtDjIOSQIyPIX9hdS/
    ++Z2dsAYa/3WaZPuVsdVJDJcWdlv8qhmp62gmwMDsqRDsB07kUY1Q825yjTWJpQs
    B6SXoqN1s7JrSajV+eJJP66CmkYPHYJBgSoMj4mPsgvwj+XfxBJRuAwMthth2Swa
    9wyzUQKBgCp9eBK/0mgEjRr1JacjDVZEcsIcj/erGA2FwoGRu1fXPevi1ggyJIKU
    DA+aRZehHqUVOafNQsMJafMqFTTJxYtgkzMRqxfDz6HpNC1hWyvE5/STswEl5Izu
    l2QSz4TU1Yk2wnrtDlIVkb6gM/JkQiOkSG5PSx9EAACZ1Yoz+NqS
    -----END RSA PRIVATE KEY-----
    

    【讨论】:

    • 您正在查看的是使用 DER 编码规则编码的 ASN.1 结构。如果您想知道里面有什么,请查看here 并将页眉和页脚行中的 base 64 粘贴到输入字段中。他愿意,我已重新格式化您的答案,请查看编辑(通过单击我名字上方的“已编辑 xxx 前”)以供将来参考。请注意,markdown 中不显示单回车,使用空格、空格、回车或双回车来添加换行符/新段落。
    • @MaartenBodewes 您的参考网站允许复制整数吗?
    • @kelalaka 复制充其量是棘手的。我正在考虑获取源代码并重新编写它。如果我没记错的话,一切都是在浏览器中执行的(尽管它显然也作为 GET 请求发送到服务器,所以当然不要将它用于您的实时密钥)。对于复制内容,您还可以使用 openssl asn1parse 可能与 -d "dump" 选项。
    • 我无法复制整个整数。关键部分,不是我的关键:),来自已发布的问题。
    • @MaartenBodewes 我看到了你的编辑,它有帮助,非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多