Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 在DES算法中使用CTR模式(在python中)_Encryption_Des_Block Cipher_Pycryptodome_Ctr Mode - Fatal编程技术网

Encryption 在DES算法中使用CTR模式(在python中)

Encryption 在DES算法中使用CTR模式(在python中),encryption,des,block-cipher,pycryptodome,ctr-mode,Encryption,Des,Block Cipher,Pycryptodome,Ctr Mode,我想通过使用PyCryptodome包在python中的DES算法中使用CTR模式。我的代码在这篇文章的末尾展示。然而我得到了这个错误:“TypeError:不可能为短块大小创建一个安全的nonce”。值得一提的是,该代码对于AES算法非常有效,但对于DES、DES3、Blowfish等(块大小为64)不起作用。据我所知,CTR模式可以应用于64位分组密码算法中 from Crypto.Cipher import DES from Crypto.Random import get_random_

我想通过使用PyCryptodome包在python中的DES算法中使用CTR模式。我的代码在这篇文章的末尾展示。然而我得到了这个错误:“TypeError:不可能为短块大小创建一个安全的nonce”。值得一提的是,该代码对于AES算法非常有效,但对于DES、DES3、Blowfish等(块大小为64)不起作用。据我所知,CTR模式可以应用于64位分组密码算法中

from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes
data = b'My plain text'
key = get_random_bytes(8)
cipher = DES.new(key, DES.MODE_CTR)
ct_bytes = cipher.encrypt(data)
nonce = cipher.nonce
cipher = DES.new(key, DES.MODE_CTR, nonce=nonce)
pt = cipher.decrypt(ct_bytes)
print("The message was: ", pt)
非常感谢。

图书馆
bs = DES.block_size
plen = bs - len(plaintext) % bs
padding = [plen] * plen
padding = pack('b' * plen, *padding)
key = get_random_bytes(8)
nonce = Random.get_random_bytes(4)
ctr = Counter.new(32, prefix=nonce)
cipher = DES.new(key, DES.MODE_CTR,counter=ctr)
ciphertext = cipher.encrypt(plaintext+padding)
作为计数器块中未递增的部分

由于块只有64位长,因此很难安全地定义nonce的长度, 考虑到环绕(如果加密大量块)或nonce重用(如果随机生成nonce)的危险

相反,您可以确定nonce不存在,计数器接受完整的64位和一个随机初始值

iv = get_random_bytes(8)
cipher = DES.new(key, nonce=b'', initial_value=iv)
最后,我想这只是一个练习。 DES是一种非常弱的密码,密钥长度只有56位,块大小只有64位。
使用AES代替。

CTR模式在技术上适用于64位分组密码,但该库的作者认为它不安全。同一密钥的重复计数器是一个安全灾难,使用64位分组密码很容易发生。谢谢。我在这里写了一个代码,但你是对的。