如何在 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 keycipher.encrypt(plaintext) 期望 bytes plaintext 而不是 str那些,所以使用 bytes 文字 key = b'hellokey' 或编码为 bytes msg = iv + cipher.encrypt(plaintext.encode())

【讨论】:

以上是关于如何在 python 3 中使用 pycrypto 库使用 DES 加密和解密图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyCrypto 中使用 X509 证书?

Windows7 Python-3.6 安装PyCrypto(pycrypto 2.6.1)出现错误以及解决方法

Microsoft Windows Python-3.6 PyCrypto 安装错误

Python踩坑之路-Python-3.6 安装pycrypto 2.6.1各种疑难杂症及解决方案

python 3.6.4 win10 安装 pycrypto模块的坑

python 3.6.4 win10 安装 pycrypto模块的坑