PyDes中pad mode简单研究

pad mode主要是填充模式,一般是按照8 bytes的数据block长度,在data长度不足block长度或倍数的时候给你补齐。

举个例子:

#use DES cipher
from pyDes import CBC,des,PAD_PKCS5,PAD_NORMAL
import binascii
key = "1234567812345678"
key = bytearray.fromhex(key)
print("key: \t", key, " len: ", len(key))
iv = b"\0\0\0\0\0\0\0\0"
deser = des(key, CBC, iv, pad=None, padmode=PAD_PKCS5)
print("randomNoStr: \t", randomNoStr, " len: ", len(randomNoStr))
cipherText = deser.encrypt(randomNoStr)
print("cipherText: \t", cipherText, " len: ", len(cipherText))
#import array
print("\tb2a_hex: \t", binascii.b2a_hex(cipherText), " len: ", len(cipherText))
clearText = deser.decrypt(cipherText)
print("clearText: \t", binascii.b2a_hex(clearText))

data 设为8 bytes 16进制的: 87A7097795A865AA
看看你得到了啥:
ciphertext: 1f44d34fb7216844eb4f598a1c871f86
在C语言下,得到的可是:1f44d34fb7216844
多了一截: eb4f598a1c871f86

这是因为这个pad mode设置的PAD_PKCS5填充模式,会按照该模式指定的方式,往传入的data后面塞数据,给你8 bytes填充成16个bytes。
可是我特么8 bytes的key,8 bytes的data,走的还是ECB单加密,我要你填充个毛线啊。

至于这个填充规律是啥,暂时还没研究出来,有空查查RFC,或许有答案。

把padmode从PAD_PKCS5 改为 PAD_NORMAL 不填充,结果就好了。1f44d34fb7216844

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值