一、 实验目的
掌握密码学相关的数学基础知识,理解模幂、求逆等运算的过程,编程实现相关算法
二、实验原理
考虑模指数,即计算形如 x^c mod n 的函数,在RSA密码体制中,加密和解密运算都是模指数运算。计算 x^c mod n 可以通过c-1次模乘来实现。
ax ≡1(mod p)当 a 和 p 互质时,方程的解 x 称为 a 关于 p 的逆元
三、实验代码
1.模幂运算
package czx.xupt.primenumber;
import java.util.Scanner;
/**
* #Author:槐序二四
* #Time:2019/12/25 17:48
* #Motto:人间荒唐市侩 不如山中作怪🌙.
*/
public class mod {
public static void main(String[] args) {
System.out.println("请输入a:");
Scanner scanner1 = new Scanner(System.in);
long i1 = scanner1.nextLong();
System.out.println("请输入b:");
Scanner scanner2 = new Scanner(System.in);
long i2 = scanner2.nextLong();
long pow = (long)Math.pow(i1, i2);
System.out.println("请输入模数p:");
Scanner scanner3 = new Scanner(System.in);
int i3 = scanner3.nextInt();
System.out.println("结果是:"+pow % i3);
}
}
2.求逆运算
package czx.xupt.primenumber;
import java.util.Scanner;
/**
* #Author:槐序二四
* #Time:2019/12/25 17:56
* #Motto:人间荒唐市侩 不如山中作怪🌙.
*/
public class inverse {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你想求逆的数(整数):");
int i = scanner.nextInt();
Scanner scanner1 = new Scanner(System.in);
System.out.println("请输入你的模数(整数):");
int i1 = scanner1.nextInt();
for (int i2 = 0; i2 < 99999999; i2++) {
int i3 = i * i2;
if (i3%i1==1){
System.out.println(i+"在模"+i1+"下的逆是:"+i2);
break;
}
}
}
}
3.随机生成一个30位左右的整数
package czx.xupt.primenumber;
import java.math.BigInteger;
import java.util.Random;
/**
* #Author:槐序二四
* #Time:2019/12/25 17:20
* #Motto:人间荒唐市侩 不如山中作怪🌙.
*/
public class Primenumber {
public static void main(String[] args) {
BigInteger bigInteger =null;
while (true){
bigInteger = new BigInteger(100, new Random());
if (bigInteger.isProbablePrime(1)) {
System.out.println(bigInteger);
break;
}
}
}
}