应用密码学实验 模幂运算、欧几里得算法、素数的检测

实验二 密码学的数学基础

模幂运算、欧几里得算法、素数的检测

  • 实验目的

通过实验熟练掌握模幂运算、欧几里得算法和素数检测算法。

  • 实验要求
  • 模幂运算
  1. 输入任意的整数p、n、a,计算a^n mod p
  2. 有对应的程序调试记录和实验验证
  • 欧几里得算法
  1. 用辗转相除法求两个数的最大公约数,输入任意两个整数,输出其最大公约数
  2. 模逆运算:输入两个整数a、b,在辗转相除的基础上,如果求得的最大公约数为1,则输出a mod b及b mod a的乘法逆元。
  • 素数检测
  1. 编程实现Eratosthenes筛法
  2. 输入任意一个整数,判定是否为素数,输出判定结果

  • 实验内容
  • 模幂运算
  1. 算法原理

快速实现模幂运算的基本原理是模重复平方计算法,其理论基础是模运算的基本性质,即相乘与求模两个运算是可交换的。

r  =(ab)(mod m) =  (a(mod m))(b(mod m))(mod m)

  1. 算法步骤
  1. 将n表示为二进制,n=(n)r (n)r-1 (n)r-2 …(n)1(n)0 ,用一个数组保存n的各个数位,n共有r+1位
  2. 循环计算(用数组b保存所有中间结果):先循环计算一系列结果。a^2 mod p,a^4 mod p,a^8 mod p,…,再把指数n的二进制表示中取值为1的位对应的a的幂相乘,即可得到最终结果
  1. 程序代码

 应用密码学实验 模幂运算、欧几里得算法、素数的检测_第1张图片

运行结果

应用密码学实验 模幂运算、欧几里得算法、素数的检测_第2张图片

  • 欧几里得算法
  1. 辗转相除

实验原理:给定两个正整数a与b,其最大公约数有如下特点:

gcd(a,b)=gcd(a-b,b)=gcd(a-2b,b)=…=gcd(a mod b,b)

上式构成了辗转相除法的理论基础:当a>b时,从a中反复减去b的倍数,直至结果比b小,这相当于用a除以b得到的余数r1,再用b除以r1,得到商和余数r2(小于r1),反复执行上述过程,让余数不断减小,直至最后能整除为止,此时便得到了a与b的最大公约数。

  1. 程序代码

应用密码学实验 模幂运算、欧几里得算法、素数的检测_第3张图片

运行结果

应用密码学实验 模幂运算、欧几里得算法、素数的检测_第4张图片

  • 素数的检测
  1. Eratosthenes筛法

算法原理:给定正整数n,为了找到小于n的所有素数,可以采取排除法:先去掉0和1,再依次去掉2、3、5、…、n^1/2的倍数,剩下的即为n以内的全部素数。

  1. 程序代码

 应用密码学实验 模幂运算、欧几里得算法、素数的检测_第5张图片

 运行结果

应用密码学实验 模幂运算、欧几里得算法、素数的检测_第6张图片

  • 实验总结

模幂运算、欧几里得算法和素数检测算法都是密码学的数学基础,必须要掌握。

模幂运算是对给定整数p、n、a,计算a^n mod p,这个运算在密码学中应用极为普遍。RSA、ElGamal、DH交换等重要密码方案中都涉及模幂运算。

欧几里得算法是初等数论中的一个基本算法,也是密码学中最常用的算法之一,利用辗转相除法求得两个给定整数a、b的最大公约数。

你可能感兴趣的:(算法)