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

首先对明文进行按位填充,然后调用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轮循环加密... 基于PythonDES加密、解密算法 DES算法是一种对称加密算法(加密密钥和解密密钥相同),加密过程要求密钥长度和待加密数据长度均为64位。因此在使用DES算法加密之前,需要把待加密数据切割位64位长度的数据块。