如何在 python 3 中使用 pycrypto 库使用 DES 加密和解密图像?
Posted
技术标签:
【中文标题】如何在 python 3 中使用 pycrypto 库使用 DES 加密和解密图像?【英文标题】:How to encrypt and decrypt image using DES using pycrypto library in python 3? 【发布时间】:2021-02-26 04:52:13 【问题描述】:这是我尝试过的用于文本加密和解密的代码:
from Crypto.Cipher import DES
from Crypto import Random
def pad(text):
while len(text) % 8 != 0:
text += " "
return text
def removepad(text):
reverse = text[::-1]
for i in range(len(text)):
if reverse[i] == ' ':
pass
else:
break
text = reverse[i:]
text = text[::-1]
return text
# plaintext = input("Enter Plaintext: ")
# key = input("Enter Key:")
plaintext = 'Encryption and Decryption of DES for OFB mode'
key = 'hellokey'
print("Plaintext: ",plaintext)
print("Key: ",key)
print()
iv = Random.new().read(DES.block_size)
cipher = DES.new(key, DES.MODE_OFB, iv)
plaintext = pad(plaintext)
msg = iv + cipher.encrypt(plaintext)
print("Encrypted Text: ")
print(msg)
print()
decCipher = DES.new(key, DES.MODE_OFB, msg[:DES.block_size])
msgback = decCipher.decrypt(msg[DES.block_size:])
dmsg = removepad(msgback.decode("utf-8"))
print("Decrypted Text: ")
print(dmsg)
这是上面代码的输出:
明文:OFB模式下DES的加解密 键:hellokey
加密文本: b'\xd5\xc5$\xdc\xac=4*\x91\xfa\x8c\x14\xe7\xbf\xb8\xd6a\x99
解密文本: OFB模式下DES的加解密
【问题讨论】:
DES 和 PyCrypto 都已过时且不安全。因此,您应该使用例如AES 和 PyCryptodome(后者还支持使用Crypto.Util.Padding
模块进行填充)。加密的总是字节,无论这些被解释为使用特定编码的文本还是图像格式(如 jpg 或 bmp)都与加密本身无关。但是由于数据量大,可能会从文件中加载图像,并且将加密数据存储在文件中。
【参考方案1】:
无论您是否必须使用 DES,DES.new(key, ...)
期望 bytes key
和 cipher.encrypt(plaintext)
期望 bytes plaintext
而不是 str
那些,所以使用 bytes 文字 key = b'hellokey'
或编码为 bytes msg = iv + cipher.encrypt(plaintext.encode())
。
【讨论】:
以上是关于如何在 python 3 中使用 pycrypto 库使用 DES 加密和解密图像?的主要内容,如果未能解决你的问题,请参考以下文章
Windows7 Python-3.6 安装PyCrypto(pycrypto 2.6.1)出现错误以及解决方法
Microsoft Windows Python-3.6 PyCrypto 安装错误
Python踩坑之路-Python-3.6 安装pycrypto 2.6.1各种疑难杂症及解决方案