密码学课设 RSA参数计算 Hust

本文介绍了在密码学课程设计中遇到的RSA参数计算问题,包括e、p、q的选择原则,强调了安全性验证的重要性。重点讨论了p和q间隔、(p-1)和(q-1)最大公因数的限制,以及自编模逆、素数判断和最大公因数计算函数的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

在这里插入图片描述

个人见解

这题其实很简单,但是加了几个条件就变难了,首先如果p,q,e组成的RSA加密太弱了的话算错(我也感觉很迷惑,安全性弱也不能算错吧…),所以除了验算这几个参数之间的关系是否正确之外还要验证他们的安全性,即容不容易被破解。

  1. e不能太小,很容易理解,e的值越大,计算的难度越高嘛,但是什么样算大什么样算小这就很…感性(?)了。不过根据这道题所有检测数据点的输入来看,只要比65536大就可以了。
  2. p和q不能间隔太小,更不能相等(废话)。但是什么样算小呢,这个如果不听老师的话自己测的话,只能自己慢慢摸索测试方法,慢慢改变范围来找到这个具体的值(有点难)。我一开始是直接用|p-q|与p和q的比值来确定大小的,后来知道正确的做法是计算(pq)^1/2与p和q的差值(这我自己一个人想不到啊,orz)。然后这个差值最好是小于2的31次方,不过如果过不了可以试试改成30次方或32次方。
  3. (p-1)和(q-1)不能太平滑。我一开始看到是懵逼的,因为什么叫平滑啊…后来听老师讲解知道了就是看(p-1)和(q-1)两者最大公因数的大小。一开始的我很蠢,想着应该比65536小都算小吧,毕竟这p和q都是快2的1000次方量级的东西…后来怎么都过不去,问了同学知道了原来超过20就算大了…20…20…20…。好吧我知道我数学很差,到现在也觉得这也太小了…感性上无法接受,然而这是事实,甚至调成16都没什么问题

上面是难点,也是这题的精髓吧,p和q的间隔,还有(p-1)和(q-1)的最大公因数大小这些自己一个人摸索是很耗时很困难的,orz。

下面就是这题的坑点了:

因为我们老师说计算模逆,判断素数,计算最大公因数的现成函数都不给用!裂开,只能自己写,好麻烦…

代码

#include <stdio.h>
#include <gmp.h>
#include <iostream>   
#include<time.h>   
#include<stdlib.h>

#define MAX 1<<31

using namespace std;

int test_num[] = {
   
  2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,
  107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199 };

void diygcd(mpz_t a, mpz_t b, mpz_t max)
{
   
    mpz_t rt, at, bt;
    mpz_init(rt);
    mpz_init_set(at, a);
    mpz_init_set(bt, b);
    if (mpz_cmp(at, bt) < 0)
        mpz_swap(at, bt);
    mpz_mod(rt, at, bt);
    while (mpz_cmp_ui(rt, 0) != 0)
    {
   
        mpz_set(at, bt);
        mpz_set(bt, rt);
        mpz_mod(rt, at, bt);
    }
    mpz_set(max, bt);
}

void expmod(mpz_t e, mpz_t m, mpz_t N, mpz_t b)
{
   
    mpz_t i, r, result;
    mpz_init(i); mpz_init(r); mpz_init(result);
    mpz_set(i, e);
    mpz_set_ui(result, 1);
    while (mpz_cmp_ui(i, 1) != 0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值