首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是已知的DES密码吗?这是什么DES密码?DES-CTR?

这是已知的DES密码吗?这是什么DES密码?DES-CTR?
EN

Stack Overflow用户
提问于 2010-08-24 22:57:07
回答 1查看 418关注 0票数 0
代码语言:javascript
复制
import Crypto.Cipher.DES
import struct

def rol32(x, y):
    ret = ((x<<y)&0xFFFFFFFF)|((x>>(32-y))&0xFFFFFFFF)
    #print 'rol32', hex(x), hex(y), hex(ret)
    return ret
def sub32(x, y):
    ret = (x & 0xFFFFFFFF) - (y & 0xFFFFFFFF)
    if ret < 0: ret += 0x100000000
    #print 'sub32', hex(x), hex(y), hex(ret)
    return ret
def mul32(x, y):
    ret = (x * y) & 0xFFFFFFFF
    #print 'mul32', x, y
    return ret

d = Crypto.Cipher.DES.new('\xcd\x67\x98\xf2\xa4\xb6\x70\x76', Crypto.Cipher.DES.MODE_ECB)

def decrypt(offset, f):
    out_buf = []
    b = f.read(16)
    buf = d.decrypt(b)
    buf = buf[8:] + buf[:8]
    for i in range(0,4):
        val = struct.unpack('<I', buf[i*4:i*4+4])[0]
        val = sub32((sub32(0x8927462, mul32(offset, 0x3210789B)) ^ rol32(val, offset % 32)), 0x12345678)
        tmp = struct.pack('<I', val)
        out_buf.append(ord(tmp[0]))
        out_buf.append(ord(tmp[1]))
        out_buf.append(ord(tmp[2]))
        out_buf.append(ord(tmp[3]))
    for i in range(len(out_buf)-1,len(out_buf)-16,-1):
        out_buf[i] ^= out_buf[i-1]
    out_buf[len(out_buf)-16] ^= (offset & 0xFF) ^ ((offset >> 14) & 0xFF)
    return out_buf
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-26 22:47:53

不是的。它当然不是CTR模式。它看起来像disc encryption mode。特别是,加密模式与LRW略有相似之处。其主要思想是根据块编号调整输入,以便多次加密相同的块不会产生相同的密文。它允许对消息进行部分重新加密,但攻击者会注意到明文的哪些部分发生了变化。

因此,有一些小的信息泄漏。因为我也看不到任何身份验证,所以我不喜欢这种加密模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3557803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档