python的des加密方法_关于python中DES加密的问题

我正在尝试创建一个LM/NTLM响应,我需要使用DES算法对服务器发送的质询进行加密

以下是我所做的:from M2Crypto.EVP import Cipher

def encryptChallenge(magic, key):

str_key = ""

for iter1 in key:

str_key = str_key + chr(iter1)

encrypt = 1

cipher = Cipher(alg='des_ede_ecb', key=str_key, op=encrypt, iv='\0'*16)

ciphertext = cipher.update(magic)

ciphertext += cipher.final()

return ciphertext

但是,当我尝试使用DES加密"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"时,我得到了以下结果:

用于加密的密钥:['0xfe', '0x9b', '0xd5', '0x16', '0xcd', '0x15', '0xc8', '0x49']

加密后的挑战:

^{pr2}$

服务器不接受上述响应

尝试使用一个名为说明.jar(http://www.unsw.adfa.edu.au/~lpb/src/DEScalc/index.html)发现加密结果为:setKey(fe9bd516cd15c849)

encryptDES(0123456789abcdef)

IP: L0=cc00ccff, R0=f0aaf0aa

Rnd1 f(R0=f0aaf0aa, SK1=0b 2c 23 12 33 1c 2b 09 ) = 988995a0

Rnd2 f(R1=5489595f, SK2=21 15 0d 11 1c 1a 3b 38 ) = 63200664

Rnd3 f(R2=938af6ce, SK3=01 35 2f 05 3e 19 30 1f ) = c206c318

Rnd4 f(R3=968f9a47, SK4=06 37 07 01 03 37 1a 3e ) = bdf738ef

Rnd5 f(R4=2e7dce21, SK5=06 14 17 29 0f 17 27 25 ) = 76c68d3d

Rnd6 f(R5=e049177a, SK6=34 14 06 0d 28 2c 23 37 ) = c182a1c7

Rnd7 f(R6=efff6fe6, SK7=04 18 2e 05 31 3a 3e 17 ) = c3e45497

Rnd8 f(R7=23ad43ed, SK8=04 13 22 27 2f 30 1f 19 ) = 4977a92c

Rnd9 f(R8=a688c6ca, SK9=12 0a 38 0c 3d 33 19 26 ) = 4975507e

Rnd10 f(R9=6ad81393, SK10=10 0b 30 1e 1f 08 2f 2e ) = d52a9361

Rnd11 f(R10=73a255ab, SK11=19 0a 31 22 05 0f 33 1f ) = 38b2a619

Rnd12 f(R11=526ab58a, SK12=38 2e 30 22 1b 3b 13 31 ) = e9dec064

Rnd13 f(R12=9a7c95cf, SK13=3a 0a 1c 12 2a 3e 35 2b ) = d88ee399

Rnd14 f(R13=8ae45613, SK14=19 09 18 1b 0b 2d 3c 16 ) = 9de6ddb2

Rnd15 f(R14=079a487d, SK15=19 39 01 12 37 14 17 36 ) = 5fb60a90

Rnd16 f(R15=d5525c83, SK16=24 05 0d 39 31 1f 2d 34 ) = 6a40b6ea

FP: L=c337cd5c, R=bd44fc97

returns c337cd5cbd44fc97

注意到上面的结果被服务器接受了

是否有一个特定的算法用于说明.jar因为我没有得到结果说明.jar在

大家好,

非常感谢您的帮助;问题在于我在python中表示十六进制的方式;我使用以下函数将“0123456789abcdef”转换为Keith提到的十六进制表示,并且它起到了作用:def HexToByte( hexStr ):

"""

Convert a string hex byte values into a byte string. The Hex Byte values may

or may not be space separated.

"""

# The list comprehension implementation is fractionally slower in this case

#

# hexStr = ''.join( hexStr.split(" ") )

# return ''.join( ["%c" % chr( int ( hexStr[i:i+2],16 ) ) \

# for i in range(0, len( hexStr ), 2) ] )

bytes = []

hexStr = ''.join( hexStr.split(" ") )

for i in range(0, len(hexStr), 2):

bytes.append( chr( int (hexStr[i:i+2], 16 ) ) )

return ''.join( bytes )

非常感谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值