栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

DES/3DES加密算法

Python 更新时间:发布时间: 百科书网 趣学号
DES加解密算法 简介

对称加密,安全性较差,经常出现被破解的案例
破解方法:暴力破解

一转DES加密

密钥长度:64bits(56bits key + 8bits奇偶校验)
明文长度:64bits

密钥扩展
  1. 十六进制转二进制
key1 = bin(int(key, 16))[2:]
  1. 压缩置换
    密钥共8个字节, 其中每个字节前七个bit
    下图为PC_1置换表
key2 = ''
checkCode = ''
for i in range(8):
	#取每个字节前7bit作为密钥
	key2 += key1[i: (i+1)*8 - 1]
	#每个字节最后一个bit作为校验码
	checkCode +=key[i*8 + 7]
#PC-1置换
key3 = ''
for i in range(56)
	key3+=key2[PC_1[i]]
  1. 密钥扩充
    下图为每一轮左移时候的左移步数
    下图为PC_2的置换表
    子密钥只取图中这些位置的数据组成子密钥,多余的位省略
C=key3[0:28] # C0
D=key3[28:56]# D0
K = []*16
for i in range(16):
	# C左移==>C, 左移步数依据轮数查表
	# D左移==>D, 左移步数依据轮数查表
	K[i] = PC_2_Conver(C,D) #将移位过的数据进行查表转换为子密钥
明文IP置换

将明文按照下表进行bit位位置调整置换

IP_data = ''
for i in range(64):
	IP_data += mingwen[IP_table[i]]
Ltemp = IP_data[0:32] #L0
Rtemp = IP_data[32:64] #R0
加密
for i in range(16)
	E盒置换(Rtemp )==>R(32bit扩展位48bit)
	R⊕子密钥K[i]==>R
	S盒置换(R)==>R(48bit压缩为32bit)
	P盒置换(R)==>R
	Ltemp⊕R==>R
	Rtemp ==>Ltemp
	R==>Rtemp 
Rtemp ==>R16
Ltemp ==>L16
IP-1置换(R16L16)==>密文
E盒置换

S盒置换
  1. 将48位数据切割成为8个6bit的数据
  2. 取出[bit0,bit5]==>行数
  3. 取出[bit1,bit2,bit3,bit4]==>列数
  4. 查找S表,取出对应的4位数据
  5. S盒置换后,一共8块数据,每块4位,共32bit
P盒置换

三转DES加密

密钥长度:

  1. 双倍长密钥:128bits
  2. 三倍长密钥:192bits

明文长度:64bits

加密 双倍长密钥

密钥分为两块(2 X 8Byte),自左到右分为LK, RK
DES( DATA, LK, TMP1 );
UDES( TMP1, RK, TMP2 );
DES( DATA, LK, DEST );

三倍长密钥

密钥分为三块(3 X 8Byte),自左到右分为LK, CK, RK
DES( DATA, LK, TMP1 );
UDES( TMP1, CK, TMP2 );
DES( TMP2, RK, DEST );

解密

对加密的每一步逆向运算即可。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/280444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号