DES密码算法:利用python中的DES模块来实现DES对称算法,以及算法的封装

DES算法简介

DES:Data Encryption Standard,即数据加密标准。美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准。DES是IBM公司研制的一种对称密码算法。

DES算法的地位:DES是过去主流的分组密码,但因密钥空间太小,已逐渐被AES所取代。

DES算法特点:

  • 是一种对称分组加密算法。
  • 分组比较短,最大64位。
  • 密钥太短。DES密钥长度是56bit,从规格上来说,DES的密钥长度是64bit,但由于每隔7bit会设置一个错误检查的bit,因此实质上其密钥长度是56bit。
  • 密码生命周期短。
  • 运算速度较慢。
  • 常见的对称加密: AES, DES, 3DES。

DES加密算法原理:

DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

3DES:

DES 的常见变体是三重 DES(3DES),使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则3DES 向后兼容 DES。

利用python进行DES加密和解密

需要安装必要的库:

pip install pycrypto

python代码:

from Crypto.Cipher import DES

#加密
def des_cbc_encode(key,iv,data):
    # key: 8个字节
    # data: 明文数据,utf-8格式
    des = DES.new(key, mode=DES.MODE_CBC, IV=iv)

    # # 需要加密的数据必须是16的倍数
    # # 填充规则: 缺少数据量的个数 * chr(缺少数据量个数)
    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("解密结果(utf-8):",result)
    print("解密结果:",result.decode("utf-8"))

# main 
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
解密结果: 冬至吃饺子

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值