DES算法模拟与八位密钥加密演示

版权申诉
0 下载量 199 浏览量 更新于2024-10-23 收藏 1.9MB RAR 举报
资源摘要信息:"DES算法模拟程序是一个用于理解和学习数据加密标准(DES)的工具。DES是一种曾经广泛使用的对称密钥加密算法,它以固定长度的64位密钥处理数据,实际上密钥长度为56位,因为每8位中的一位用作奇偶校验。这个模拟程序允许用户通过输入8位密钥对明文进行加密或解密操作,从而得到密文或明文输出。该程序的设计符合DES算法的基本流程,包括初始置换、16轮的复杂置换和变换、以及最终的逆初始置换。程序的界面简洁,操作简便,用户只需要输入明文和密钥,点击加密或解密按钮,就可以在编辑框中直接看到加密后的密文或者解密后的明文结果。" DES(Data Encryption Standard,数据加密标准)算法是一种对称密钥加密算法,对称密钥意味着加密和解密使用相同的密钥。DES算法设计了一个复杂的替换和置换网络,其目的是将明文转换为看似随机的密文,而且具有足够的安全性来抵抗各种密码分析攻击。 DES算法的加密过程可以分为以下主要步骤: 1. 初始置换:将64位的明文按照固定规则重新排列,准备进入16轮加密操作。 2. 16轮复杂操作:每一轮都包括一个扩展置换、一个与子密钥进行的混合操作、一个S盒替换、一个P盒置换和一个与下一轮子密钥的混合操作。子密钥由原始密钥经过置换和选择生成。 3. 最终置换:在完成所有16轮操作后,再进行一次最终置换,得到最终的密文。 解密过程与加密过程类似,只是使用的子密钥序列与加密时的顺序相反。 由于DES的密钥长度较短(实际上为56位),在计算机硬件性能提高后,DES算法的安全性已不再足够应对强大的攻击,因此已被更安全的算法如AES(高级加密标准)所取代。 该模拟程序是学习和理解DES算法的一个很好的入门工具。通过这个程序,用户可以直观地看到DES加密解密的过程,理解每一个操作步骤和原理。对那些对密码学或网络安全感兴趣的用户来说,模拟DES算法的过程可以帮助他们建立对现代加密技术的初步认识,并为进一步学习更复杂的加密技术打下基础。程序的互动性也使得用户能够在实际操作中进行实验,加深对加密原理的理解。

import numpy as np import matplotlib.pyplot as plt import math def count(lis): lis = np.array(lis) key = np.unique(lis) x = [] y = [] for k in key: mask = (lis == k) list_new = lis[mask] v = list_new.size x.append(k) y.append(v) return x, y mu = [14, 23, 22] sigma = [2, 3, 4] tips = ['design', 'build', 'test'] figureIndex = 0 fig = plt.figure(figureIndex, figsize=(10, 8)) color = ['r', 'g', 'b'] ax = fig.add_subplot(111) for i in range(3): x = np.linspace(mu[i] - 3*sigma[i], mu[i] + 3*sigma[i], 100) y_sig = np.exp(-(x - mu[i])**2/(2*sigma[i]**2))/(math.sqrt(2*math.pi)) ax.plot = (x, y_sig, color[i] + '-') ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days') ax.set_ylabel('probability') plt.show() plt.grid(True) size = 100000 samples = [np.random.normal(mu[i], sigma[i], size) for i in range(3)] data = np.zeros(len(samples[1])) for i in range(len(samples[1])): for j in range(3): data[i] += samples[j][i] data[i] = int(data[i]) a, b = count(data) pdf = [x/size for x in b] cdf = np.zeros(len(a)) for i in range(len(a)): if i > 0: cdf[i] += cdf[i - 1] cdf = cdf/size figureIndex += 1 fig = plt.figure(figureIndex, figsize=(10, 8)) ax = fig.add_subplot(211) ax.bar(a, height=pdf, color='blue', edgecolor='white', label='MC PDF') ax.plot(a, pdf) ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days for project') ax.set_ylabel('probability') ax.set_title('Monte Carlo Simulation') ax = fig.add_subplot(212) ax.plot(a, cdf) ax.legend(loc='best', frameon=False) ax.set_xlabel('# of days for project') ax.set_ylabel('probability') ax.grid(True) plt.show()修改一下代码

2023-05-18 上传