python 加密 rsa 问题

标签 python cryptography rsa pycrypto

python Crypto包中的RSA加密/解密好像有问题:

from Crypto.PublicKey import RSA
from os import urandom
def test(keylen, datalen, rand_len):
    k = RSA.generate(keylen)
    ok, fail = (0,0)
    for i in range(1000):
        a = urandom(datalen)
        if a == k.decrypt(k.encrypt(a, urandom(rand_len))):
            ok += 1
        else:
            fail += 1
    return ok, fail

无论我使用何种 keylen/datalen/rand_len 组合,我都无法 100% 地解密它。这只是我安装的 Crypto 吗?

>>> test(1024,128,0)
(853, 147)
>>> test(1024,127,0)
(996, 4)
>>> test(2048,127,0)
(994, 6)

最佳答案

试试这个:

from Crypto.PublicKey import RSA
from os import urandom
def test(keylen, datalen, rand_len):
    k = RSA.generate(keylen)
    ok, fail = (0,0)
    for i in range(1000):
        a = urandom(datalen).lstrip(b'\x00')
        if a == k.decrypt(k.encrypt(a, urandom(rand_len))):
            ok += 1
        else:
            fail += 1
    return ok, fail

解释:

pycrypto 在内部对数字而不是字节进行操作,这意味着不会考虑前导零。 encryptdecrypt 是非常底层的。

要签名,您应该使用 Signature包 (pycrypto2.5+),负责正确填充您的消息。否则你必须自己填充消息。

关于python 加密 rsa 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11465936/

相关文章:

java - 在 php 中验证来自 java 的 rsa 签名

c - 如何使用 RSA 公钥解密数据?

python - 如何使用python将任何文件放入 Artifactory 中?

python - PYTHON 中的 tanh 估计器归一化

python - 静态文件不会在 Django (Pycharm) 中加载

python - 如何将 AWS 证书与 python 请求库一起使用?

android - bouncycaSTLe 中的 NoSuchMethodError

c++ - OFB 和 CFB 哪个更安全?

javascript - 如何使用 javascript 创建签名的 PKCS#7 消息?

c# - 在 C# 中使用 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 进行加密