如何生成256/512位RSA密钥?PyCrypto报错替代方案咨询
生成256/512位RSA密钥的简便替代方案
问题背景
使用PyCryptodome的RSA.generate()生成256或512位密钥时,会触发如下错误:
ValueError: RSA modulus length must be a multiple of 256 and >= 1024
这是因为库内置了安全限制,强制要求RSA密钥长度不小于1024位。如果只是用于测试场景,不想重新编译OpenSSL,可以用以下两种简便方案:
方案1:使用第三方rsa库
这个库支持生成更小的RSA密钥,无需修改底层依赖:
- 先安装库:
pip install rsa
- 生成密钥的示例代码:
import rsa # 生成256位密钥(poolsize=1避免多线程,仅测试用) pub_key, priv_key = rsa.newkeys(256, poolsize=1) # 用密码加密私钥(PKCS#8格式) passphrase = b"p@ssw0rd" encrypted_priv_pem = priv_key.save_pkcs1(encoding="PEM", passphrase=passphrase, pkcs=8) pub_pem = pub_key.save_pkcs1(encoding="PEM") # 输出密钥内容 print("加密后的私钥:") print(encrypted_priv_pem.decode()) print("\n公钥:") print(pub_pem.decode())
注意:256/512位RSA密钥的安全性极低,仅可用于测试场景,绝对不能用于生产环境。
方案2:修改PyCryptodome的源码限制
直接修改本地PyCryptodome库的RSA.py文件,移除长度限制:
- 找到
RSA.py的路径(报错信息里已给出:/usr/lib/python3/dist-packages/Crypto/PublicKey/RSA.py) - 打开文件,定位到如下代码段:
if bits < 1024 or (bits & 0xff) != 0: # pubkey.getStrongPrime doesn't like anything that's not a multiple of 256 and >= 1024 raise ValueError("RSA modulus length must be a multiple of 256 and >= 1024")
- 修改阈值,比如改成:
if bits < 256 or (bits & 0xff) != 0: raise ValueError("RSA modulus length must be a multiple of 256 and >= 256")
或者直接注释掉这段判断(不推荐,容易忽略安全风险)。
注意:修改源码后,升级PyCryptodome会覆盖这个修改,同样仅适合测试场景。
内容的提问来源于stack exchange,提问作者Rzdhop
相关产品推荐
相关产品推荐

