Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
Python 2.7 Can';t使用pycryptodome解密河豚CTR文件_Python 2.7_Pycrypto_Blowfish_Pycryptodome - Fatal编程技术网

Python 2.7 Can';t使用pycryptodome解密河豚CTR文件

Python 2.7 Can';t使用pycryptodome解密河豚CTR文件,python-2.7,pycrypto,blowfish,pycryptodome,Python 2.7,Pycrypto,Blowfish,Pycryptodome,我正在尝试恢复使用blowfish的旧纯python实现加密的文件 旧代码依赖于单个blofish.py文件(版权所有(C)2002 Michael Gilfix) 通过执行以下操作对旧数据进行加密: cipher = Blowfish(self.masterKey) cipher.initCTR() cleanData = cipher.decryptCTR(encData) 该代码没有初始化现代blowfish实现中所需的nonce,因此我无法将其移植到pycryptodome函数 cip

我正在尝试恢复使用blowfish的旧纯python实现加密的文件

旧代码依赖于单个blofish.py文件(版权所有(C)2002 Michael Gilfix)

通过执行以下操作对旧数据进行加密:

cipher = Blowfish(self.masterKey)
cipher.initCTR()
cleanData = cipher.decryptCTR(encData)
该代码没有初始化现代blowfish实现中所需的nonce,因此我无法将其移植到pycryptodome函数

cipher = Blowfish.new(self.masterKey, Blowfish.MODE_CTR, nonce = ?????)
cleanData = cipher.decrypt(encData)
我能找到的唯一建议是在initCTR函数中,其中iv设置为0(即使CTR模式没有iv)

有人能帮我吗?

首先,有几个警告:

  • 按照今天的标准,河豚并不是一种安全的密码。使用AES
  • 计数器模式(CTR)不安全,因为它无法检测对加密数据的恶意修改。使用其他模式,如GCM、CCM或EAX
  • 计数器模式确实需要对每条消息进行随机IV。但是,您使用的固定静脉输液是非常错误的
  • 要回答您的问题,您应该将密码初始化为:

    from Crypto.Util import Counter
    
    ctr = Counter.new(64, initial_value=0, little_endian=True)
    cipher = Blowfish.new(self.masterKey, Blowfish.MODE_CTR, counter=ctr)
    
    计数器对象被记录下来。它允许定义小端计数器(通常CTR是大端计数器)

    注意:big-endian机器的加密方式与little-endian机器不同。

    首先,有几个警告:

  • 按照今天的标准,河豚并不是一种安全的密码。使用AES
  • 计数器模式(CTR)不安全,因为它无法检测对加密数据的恶意修改。使用其他模式,如GCM、CCM或EAX
  • 计数器模式确实需要对每条消息进行随机IV。但是,您使用的固定静脉输液是非常错误的
  • 要回答您的问题,您应该将密码初始化为:

    from Crypto.Util import Counter
    
    ctr = Counter.new(64, initial_value=0, little_endian=True)
    cipher = Blowfish.new(self.masterKey, Blowfish.MODE_CTR, counter=ctr)
    
    计数器对象被记录下来。它允许定义小端计数器(通常CTR是大端计数器)


    注意:在大端机上的加密方式不同于在小端机上的加密方式。

    其思想是先解密内容,然后使用AES进行加密。您的解决方案只能部分起作用。。。它正确地解密了前8个字符,但输出错误:结果:B8-CA-3A½ø0h£B3Æ«-预期:B8-CA-3A-7E-F0-23I刚刚注意到blowfish.sh使用本机端性作为计数器,并且很可能您的数据是在小端模式下加密的(CTR通常在大端模式下计数)。因此,您需要使用Crypto.Util.Counter.with Counter,它的工作就像一个符咒。现在是时候升级到安全cypherSaying CTR模式不安全是不真实的,因为威胁模型可能需要或不需要身份验证。此外,CTR模式可以在加密后的MAC环境中安全使用。注:我一般不支持CTR模式。还有很多次GCM、CCM或EAX模式不可用。@zaph CTR模式本身就是“使用大量ifs进行安全保护”。普通开发者有很高的射中自己脚的概率,使用GCM/GCM/EAX的几率要小得多。其想法是解密内容,然后使用AES加密,直到现在。您的解决方案只能部分起作用。。。它正确地解密了前8个字符,但输出错误:结果:B8-CA-3A½ø0h£B3Æ«-预期:B8-CA-3A-7E-F0-23I刚刚注意到blowfish.sh使用本机端性作为计数器,并且很可能您的数据是在小端模式下加密的(CTR通常在大端模式下计数)。因此,您需要使用Crypto.Util.Counter.with Counter,它的工作就像一个符咒。现在是时候升级到安全cypherSaying CTR模式不安全是不真实的,因为威胁模型可能需要或不需要身份验证。此外,CTR模式可以在加密后的MAC环境中安全使用。注:我一般不支持CTR模式。还有很多次GCM、CCM或EAX模式不可用。@zaph CTR模式本身就是“使用大量ifs进行安全保护”。普通开发者射中自己脚部的概率很高,使用GCM/GCM/EAX的几率要小得多。