需要安装必要的库:
pip install pycrypto
python代码:
from Crypto.Cipher import DES
def des_cbc_encode(key,iv,data):
des = DES.new(key, mode=DES.MODE_CBC, IV=iv)
pad_len = 8 - len(data) % 8
data += (pad_len * chr(pad_len)).encode("utf-8")
bs = des.encrypt(data)
print("加密结果:",bs)
def des_cbc_decode(key,iv,cipher_data):
des = DES.new(key, mode=DES.MODE_CBC, IV=iv)
result = des.decrypt(cipher_data)
print("解密结果:",result.decode("utf-8"))
if __name__ == '__main__':
print("des encode begin");
key = b"ACD123AE"
iv = b"01020304"
data = "冬至吃饺子"
print("明文:",data);
data = data.encode("utf-8")
print("明文(utf-8):",data);
des_cbc_encode(key,iv,data)
print("\n");
print("des decode begin");
cipher_data = b'\xb0\xd3\xd5L\xb4r\xca"\xb8\xd1\x00\xaa\x07D\xc4\xb3'
des_cbc_decode(key,iv,cipher_data)
运行结果:
% python3 des_test.py
des encode begin
明文: 冬至吃饺子
明文(utf-8): b’\xe5\x86\xac\xe8\x87\xb3\xe5\x90\x83\xe9\xa5\xba\xe5\xad\x90’
加密结果: b’\xb0\xd3\xd5L\xb4r\xca"\xb8\xd1\x00\xaa\x07D\xc4\xb3’
des decode begin
解密结果: 冬至吃饺子
首先对明文进行按位填充,然后调用encrypt()和decrypt()函数实现加密和解密操作,最后去除填充并返回解密后的明文。密钥的生成:将64位密钥按照置换选择1表进行置换,得到56位的密钥,并分成左右两部分各28位。16轮迭代:将加密得到的块分成左右两部分各32位,分别作为下一轮的输入,重复上述运算直到第16轮。加密运算:把置换后的明文块和第1个子密钥进行加密运算,得到一个64位的块。初始置换:对64位的明文按照初始置换表进行置换处理。明文分组:将明文分成64位的块,对每个块进行加密。
钉钉 DES加密:param password: 密码明文:param key: 密钥:param iv: 秘钥偏移量 必须是8字节的倍数:param model: 加密模式 CBC ECB:return: 加密之后的数据。
密码学作业之DES
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与...
需要指出的是,Python支持的DES-CBC,key是8位的,在openssl 3.0后已经移除,建议采用安全性更高的DES-EDE-CBC或DES-EDE3-CBC。另外一种方法,就是采用C/C++编写一个Windows DLL,具体可见 windows动态链接库DLL-文本加密和解密以上是非常简单的代码,根据实际应用场景,需要自己再封装另外的代码
DES加密算法原理及实现
DES是一种对称加密算法【即发送者与接收者持有相同的密钥】,它的基本原理是将要加密的数据划分为n个64位的块,然后使用一个56位的密钥逐个加密每一个64位的块,得到n个64位的密文块,最后将密文块拼接起来得到最终的密文
DES加密过程接收一个明文盒一个64位的密钥key,明文字符串会被转换为对各64位的块,加密过程以块位单位,经过初态转换,16轮循环加密...
基于Python的DES加密、解密算法
DES算法是一种对称加密算法(加密密钥和解密密钥相同),加密过程要求密钥长度和待加密数据长度均为64位。因此在使用DES算法加密之前,需要把待加密数据切割位64位长度的数据块。