- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 PKCS1_OAEP 加密算法来加密文件。文件加密成功,但无法解密文件,报错“Ciphertext with incorrect length”。
加密算法在这里:
#!/usr/bin/python
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
import zlib
import base64
fd = open('test.doc', 'rb')
message = fd.read()
fd.close()
print "[*] Original File Size: %d" % len(message)
#message = 'To be encrypted'
key = RSA.importKey(open('pubkey.der').read())
cipher = PKCS1_OAEP.new(key)
compressed = zlib.compress(message)
print "[*] Compressed File Size: %d" % len(compressed)
chunk_size = 128
ciphertext = ""
offset = 0
while offset < len(compressed):
chunk = compressed[offset:offset+chunk_size]
if len(chunk) % chunk_size != 0:
chunk += " " * (chunk_size - len(chunk)) # Padding with spaces
ciphertext += cipher.encrypt(chunk)
offset += chunk_size
print "[*] Encrypted File Size: %d" % len(ciphertext)
encoded = ciphertext.encode("base64")
print "[*] Encoded file size: %d" % len(encoded)
fd = open("enc.data", 'wb')
fd.write(encoded)
fd.close()
print "[+] File saved successfully!"
解密算法在这里:
#!/usr/bin/python
from Crypto.Cipher import PKCS1_OAEP
from Crypto.PublicKey import RSA
import zlib
import base64
key = RSA.importKey(open('privkey.der').read())
cipher = PKCS1_OAEP.new(key)
fd = open('enc.data', 'rb')
encoded = fd.read().strip('\n')
fd.close()
decoded = encoded.decode("base64")
chunk_size = 128
offset = 0
plaintext = ""
while offset < len(decoded):
plaintext += cipher.decrypt(decoded[offset:offset+chunk_size])
offset += chunk_size
#plaintext = cipher.decrypt(decoded)
decompress = zlib.decompress(plaintext)
fd = open('decr.doc', 'wb')
fd.write(decompress)
fd.close()
使用以下脚本生成 key
from Crypto.PublicKey import RSA
new_key = RSA.generate(2048, e=65537)
public_key = new_key.publickey().exportKey("PEM")
private_key = new_key.exportKey("PEM")
fileWrite(fileName, data):
fd = open(fileName, 'wb')
fd.write(data)
fd.close()
fileWrite('privkey.der', private_key)
fileWrite('pubkey.der', public_key)
最佳答案
您使用 2048 位 RSA key 进行加密,这会生成 2048 位(256 字节) 的加密 block 。您的解密实现假定加密 block 为 128 字节,而实际上它们为 256 字节,因此您会收到“长度不正确”错误。请注意您的加密文件大小 (64512) 是压缩文件大小 (32223) 的两倍多。
一般来说,您不会将 RSA 用于批量加密(因为它很慢),而是将其与对称加密(例如 AES)结合使用>。然后,您将使用随机 AES key 加密数据,然后使用 RSA key 加密 AES key 。这样你就可以获得AES的速度和RSA的两个 key 。这被称为 Hybrid Encryption .
关于python - pycrypto:无法解密文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809743/
有人可以帮助我吗?本指导剂量工作: PyCrypto on python 3.5 命令行: creating build\temp.win32-3.6\Release\src C:\Program
我正在尝试在 CryptoJS 上解密并在 PyCrypto 上加密。 我看到 this 一个很好的答案,就像魅力一样,唯一的问题是它调整 PyCrypto 以与 CryptoJS 一起工作,我更喜欢
我需要 pycrypto 因为它需要使用 dnspython 库的一些函数。我在网上发现一些帖子暗示 pycrypto 已死。但是,我需要 dnspython 并且别无选择,只能使用它。我什至尝试安装
我正在使用 PKCS1_OAEP 加密算法来加密文件。文件加密成功,但无法解密文件,报错“Ciphertext with incorrect length”。 加密算法在这里: #!/usr/bin/
我试图让 2 个程序使用公钥在网络上共享加密数据,但我遇到了一个难题:共享的信息( key 和/或加密数据)似乎被修改了。我希望保持加密数据格式和 key 格式尽可能简单,以便与其他语言兼容。为了解决
如何将 pycrypto 与 GAP 结合使用? 它说 here它不支持最新版本。这是否意味着我必须使用他们指出的版本? 我试过了,但是,当我执行 setup.py 时我收到错误 src/MD2.c:
ValueError: invalid version number '2.20.51.20100613' 我在安装 pycrypto 时遇到问题。尝试过包管理器:pip & easy_install
仍然不能让它正常工作。我的问题是关于如何使解密线工作。这是我写的: class IVCounter(object): @staticmethod def incrIV(self):
我从 JS RSA 库 (http://www-cs-students.stanford.edu/~tjw/jsbn/) 加密纯文本并从 python Crypto.PublicKey 解密。 但是,
我在使用 PyCrypto 时遇到了重大问题,如下面的代码所示。一个问题是测试用例不会以可重复的方式失败,而是在使用不同 key 的不同平台上有不同的原因。 请注意,测试用例为 Alice 和 Bob
我已经使用 pycrypto 生成了公钥和私钥,并使用导出 key 将它们保存到一个文件中: from Crypto.PublicKey import RSA bits=2048 new_key =
我试图了解 PyCrypto 如何在项目中使用,但我没有完全理解初始化向量 (IV) 的重要性。我发现在解码字符串时我可以使用错误的 IV,而且除了前 16 个字节( block 大小)之外,我似乎仍
我正计划在一个项目中使用 PyCrypto,我想知道 PyCrypto 是否足够安全可靠,可以使用。如何确保 PyCrypto 根据 RSA 和 AES 等各种加密算法正确加密数据? 最佳答案 视情况
我尝试使用 pip 在 python 3.6.0 上安装 pysnmp(使用 pycrypto),但出现错误: Command ""c:\program files (x86)\python36-32
我使用 pycrypt 库编写了一些代码,我一定做错了什么,但我不知道我做错了什么。我(几乎)可以用错误的初始化向量解密消息,即使我相信我正在遵循他们的示例。 from Crypto.Cipher i
我在 web.py 中构建应用程序,但在将加密数据存储在 MySQL 中时遇到了一些问题。 PyCrypto 创建的密码文本看起来像:'\x06\x7f\x81\xa0\xf4d\x00H\xef\x
我正在使用 Pycryptodome(一个 PyCrypto 分支)来创建 AES-GCM 密文。我使用以下 Python 代码进行加密: cek = os.urandom(16) nonce = o
我正在尝试了解用于公钥和私钥的 pyCrypto 加密和解密方法,但我看到了一些奇怪的东西。假设我有一组私钥和公钥,存储在文件 dummy_private.txt 和 dummy_public.txt
我正在尝试对哈希执行盲化和非盲化。 以下: https://gdata-python-client.googlecode.com/hg/pydocs/gdata.Crypto.PublicKey.RS
创建了一个带套接字的客户端-服务器应用程序,我正在尝试将签名从客户端传输到服务器。我将它从元组转换为字符串,然后再转换回元组。但签名停止工作。如何解决? from Crypto.Hash import
我是一名优秀的程序员,十分优秀!