DES 算法

1.概念

DES是一种将64比特的明文加密成64比特的密文的对称密码算法,它的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7比特会设置一个用于错误检查的比特,因此实质上其密钥长度是56比特。DES是分组密码一种。

2.步骤

(1)IP置换,利用IP表置换

(2)将输人的数据等分为左右两部分。

(3)将输人的右侧直接发送到输出的右侧。

(4) 将输人的右侧发送到轮函数。

( 轮函数(Round Function)

目的:通过一系列复杂的操作增强加密效果。

过程:DES算法包含16轮相同的操作,每轮操作如下:

扩展置换(E-box) :将Rn(右32位)通过E盒扩展到48位。

与轮密钥异或:将扩展后的48位数据与对应的轮密钥进行异或运算。

S盒替换(S-boxes) :将异或后的数据分为8个6位的块,每个块通过对应的S盒进行替换(头尾行中间列),S盒将6位输入映射为4位输出。

P盒置换(P-box) :将S盒替换后的32位数据通过P盒进行置换,P盒定义了32位输出的新顺序。)

(5)轮函数根据右侧数据和子密钥,计算出一串看上去是随机的比特序列。

(6)将上一步得到的比特序列与左侧数据进行XOR运算,并将结果作为加密后的左侧。

(7)将16轮计算后结果进行IP-1逆置换。

      解密过程与加密过程几乎一致,将明文与密文位置交换即可。

(注:DES是一种16轮循环的Feistel 网络。 在 Feistel网络中,加密的各个步骤称为轮(round),整个加密过程就是进行若干次轮的循环。)

3.密钥生成

DES算法使用64位的密钥,但实际上只有56位参与到加密过程中。这是因为每8位中的第8位是用作奇偶校验的。密钥生成过程如下:

  1. PC-1置换:首先,64位密钥通过置换选择1(PC-1)进行置换,去除奇偶校验位,得到56位密钥。

  2. 分割:将56位密钥分割成两个28位的部分,称为C0和D0。

  3. 循环左移:对C0和D0进行循环左移操作,移动的位数根据轮次而定。在16个轮次中,第1、2、9、16轮移动1位,其余轮次移动2位。

  4. PC-2置换:将移动后的C和D重新组合,然后通过置换选择2(PC-2)生成48位的子密钥。

每一轮加密都会使用一个不同的子密钥,这些子密钥是由主密钥通过上述步骤生成的。这个过程确保了每一轮使用的密钥都是唯一的,增加了破解的难度。

4.python代码实现

# 导入必要的库
import binascii

# 定义初始置换函数
def initial_permutation(data_block):
# IP置换表
ip_table = [58, 50, 42, 34, 26, 18, 10, 2,
60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6,
64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1,
59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5,
63, 55, 47, 39, 31, 23, 15, 7]
return permute(data_block, ip_table)

# 定义置换函数
def permute(data_block, table):
return ''.join(data_block[i - 1] for i in table)

# 定义主加密函数
def des_encrypt(plain_text, key):
# 将明文和密钥转换为二进制
bin_plain_text = bin(int(binascii.hexlify(plain_text.encode()), 16))[2:].zfill(64)
bin_key = bin(int(binascii.hexlify(key.encode()), 16))[2:].zfill(64)

# 初始置换
permuted_block = initial_permutation(bin_plain_text)

# 分为左右两部分
left, right = permuted_block[:32], permuted_block[32:]

# 进行16轮加密
for round in range(16):
# 此处省略子密钥生成和F函数变换的代码
#
# 将左右两部分合并
combined_block = right + left

# 逆初始置换
final_permuted_block = initial_permutation(combined_block)

# 将二进制转换为十六进制密文
cipher_text = hex(int(final_permuted_block, 2))[2:].upper()
return cipher_text

# 使用DES加密
encrypted_data = des_encrypt('your-plain-text', 'your-key')
print('Encrypted Data:', encrypted_data)

5.三重DES

概念:三重DES(triple-DES)是为了增加DES的强度,将DES重复3次得到的一种密码算法,通常缩写为3 DES。

特点:加密-解密-加密,当三次密钥一致时,相当于一般DES解密。

一,三使用相同密钥时(二密钥不同),称为DES-EDE2(EDE表示的是加密(Encryption)→解密(Decryption)→加密(Encryption)这个流程。)

当一,二,三密钥都不同时,称为DES-EDE3。

3DES解密过程与加密过程相反。

6.现状

尽管三重DES目前还被银行等机构使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值