【愚公系列】2022年04月 现代密码学-DES

举报
愚公搬代码 发表于 2022/04/30 23:12:13 2022/04/30
【摘要】 一、DES概念DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的...

一、DES概念

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

二、DES原则

DES设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion),其目的是抗击敌手对密码系统的统计分析。混淆是使密文的统计特性与密钥的取值之间的关系尽可能复杂化,以使密钥和明文以及密文之间的依赖性对密码分析者来说是无法利用的。扩散的作用就是将每一位明文的影响尽可能迅速地作用到较多的输出密文位中,以便在大量的密文中消除明文的统计结构,并且使每一位密钥的影响尽可能迅速地扩展到较多的密文位中,以防对密钥进行逐段破译。

三、DES基本属性

DES利用加密的两个基本属性:替换和变换。DES一共16步,每一步称为一轮,每一轮进行替换与变换步骤,主要步骤:

  • 首先将64位明文块送入初始置换函数。
  • 对明文进行初始置换。
  • 初始置换产生转换块的两半,假设为左明文(LPT)和右明文(RPT)。
  • 每个左明文与右明文经过16轮加密过程,各有各的密钥。
  • 最后,将左明文和右明文重新连接起来,对组成的块进行最终置换。
  • 这个过程的结果得到64位密文。
    在这里插入图片描述

二、python脚本

from pyDes import *
import base64
class Des3(object):
    def __init__(self, key, iv):
        # 这里密钥key长度必须为16/24, ,偏移量ivs
        self.key = key
        self.mode = CBC
        self.iv = iv

    # 加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
    def encrypt(self, text):
        des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
        data = des3.encrypt(text)
        data = base64.b64encode(data)
        return data.decode('utf-8')

    # 解密后,去掉补足的空格用strip() 去掉
    def decrypt(self, data):
        des3 = triple_des(self.key, self.mode, self.iv, pad=None, padmode=PAD_PKCS5)
        data = base64.b64decode(data)
        text = des3.decrypt(data)
        return text.decode('hex')
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。