密码学课程设计
}
goto next1;
1.4 关键算法分析
(1)如何快速求两个数的公约数。 int gcd(int a,int b) { if(a%b==0)return b; return gcd(b,a%b); }
(2)如何执行加密和解密运算。
//下面是加密或者解密函数,需要4个参数:a1 ,a2, s1,密钥数组。 string encryption_or_decryption(int a1,int a2 ,string s1,int a[M][M]) { string s2; int Plaintext[M];//明文数组 int ciphertext[M]={0};//密文数组 for(int i=0;i return s2; } (3)求行列式的值。 //下面这个函数是用来计算行列式的,计算行列式的目的是为了判断矩阵是否可逆。 int DET(int n ,int c [M][M]) { if(n==2)return c[0][0]*c[1][1]-c[0][1]*c[1][0]; int i_1,j_1,d; //d为数组b的行 int b[M][M]; //用于存放余子式 11 密码学课程设计 int p=0,q=0; int sum=0; for(i_1=0;i_1 for(d=0;d if(d for(j_1=0;j_1 b[d][j_1]=c[d+p][j_1+1]; } } if(i_1%2==0) q=1; else q=-1; sum=sum+c[i_1][0]*q*DET(n-1,b); } return sum; } 1.5 运行结果分析 如下是我的程序运行时的界面: 图1-2 让电脑随机生成1到100的整数,随机生成的矩阵不一定能成为秘钥,根据条件 gcd(det K,26)=1进行判断,如图2: 12 密码学课程设计 图1-3 尝试成功后使用下面矩阵为秘钥矩阵: 图1-4 执行更改秘钥功能,如图5: 图 1-5 输入1 加密,输入2解密,如下图1-6: 13 密码学课程设计 图1-6 图7 由图7可知,明文和密文经加密和解密后前后相同,说明程序运行正确。 1.6 安全性分析 根据相应的加密原理可知:希尔密码加密矩阵的阶数越大,破译的难度越大。而希尔密码在一定程度上克服了传统密码在统计学规律上的不足,能够抵御一般的频率分析法但是其基于线性变换的安全性是极其脆弱的,攻击者截取一定数目的明文和密文对就可以通过线性运算得到相应的密钥。另外,在计算机算力飞速发展的今天,通过遍历希尔密码的密钥空间破解相应的密钥已经是很简单的事了。 实验二 MD5算法的实现 2.1 MD5算法概述 MD5、SHA-1是当前国际通行的两大标准 MD5由国际著名密码学家、图灵奖获得者兼公钥加密算法RSA的创始人Rivest设计,SHA-1由美国制定密码算法的标准机构—美国国家标准技术研究院(NIST)与美国国家安全局(NSA)设计两大算法是数字签名及许多其它密码应用领域的关键技术,广泛应用于金融、证券等电子商务领域 SHA-1早在1994年便为美国政府采纳,目前是美国政府广泛应用的Hash函数密码算法。 14 密码学课程设计 对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。 MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如: MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461 这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的\抵赖\,这就是所谓的数字签名应用。 MD5还广泛用于加密和解密技术上。比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。 2.2算法原理与设计思路 在MD5算法中,首先需要对信息进行填充,使其位长对512求余的结果等于448。因此,信息的位长(Bits Length)将被扩展至N*512+448,N为一个非负整数,N可以是零。填充的方法如下,在信息的后面填充一个1和无数个0,直到满足上面的条件时才停止用0对信息的填充。然后,在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息的位长=N*512+448+64=(N+1)*512,即长度恰好是512的整数倍。这样做的原因是为满足后面处理中对信息长度的要求。总体流程如下图所示, 表示第i个分组,每次的运算都由前一轮的128位结果值和第i块512bit值进行运算。初始的128位值为初试链接变量,这些参数用于第一轮的运算,以大端字节序来表示,他们分别为:A=0x01234567,B=0x89ABCDEF,C=0xFEDCBA98,D=0x76543210。 15