信息安全密码学实验三:密码学数学基础实验

一、 实验目的

掌握密码学相关的数学基础知识,理解模幂、求逆等运算的过程,编程实现相关算法

二、实验原理

考虑模指数,即计算形如 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;
            }
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值