首页 > 其他分享 > 密码工程-大素数

密码工程-大素数

时间:2023-06-03 21:00:37浏览次数:28  
标签:工程 temp state number 密码 素数 gmp mpz

密码工程-大素数

任务

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
  2. 利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime 函数(10‘)
  3. 在测试代码中产生一个在范围l = 2^255至u = 2^256-1内的素数。(5‘)
  4. 用OpenSSL验证你产生的素数是不是正确(5’)
  5. 提交代码和运行结果截图

代码

  • 利用大整数库(GMP或者OpenSSL),实现 GenerateLargePrime 函数,输入:l(素数所在范围的下界)、u(素数所在范围的上界),输出:p(一个在l,…,u区间内的随机素数)

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

// Generate a random large prime number between lower and upper bounds
void GenerateLargePrime(mpz_t p, mpz_t l, mpz_t u) {
	mpz_t temp;
	mpz_init(temp);

	gmp_randstate_t state;
	gmp_randinit_default(state);
	gmp_randseed_ui(state, time(NULL));

	do {
		mpz_urandomm(temp, state, u); // Generate a random number between 0 and u
		mpz_add(temp, temp, l);       // Add l to the random number to get a number between l and u
		mpz_nextprime(p, temp);       // Find the next prime number after temp
	} while (mpz_cmp(p, u) > 0);    // Repeat until the prime number is within the range [l, u]

	mpz_clear(temp);
	gmp_randclear(state);
}

int main() {
	mpz_t l, u, p;
	mpz_init(l);
	mpz_init(u);
	mpz_init(p);

	mpz_set_str(l, "57896044618658097711785492504343953926634992332820282019728792003956564819968", 10); // Set lower bound 2^255
	mpz_set_str(u, "115792089237316195423570985008687907853269984665640564039457584007913129639935", 10); // Set upper bound 2^256-1

	GenerateLargePrime(p, l, u);

	gmp_printf("Large prime: %Zd\n", p);

	mpz_clear(l);
	mpz_clear(u);
	mpz_clear(p);

	return 0;
}

  • 2^255:

    57896044618658097711785492504343953926634992332820282019728792003956564819968

  • 83124435449170871735329890786632912703260867023741059705552134041721470528513

  • 84240690159250997246407786282298096921052910984281216584040636438021785203849

  • 2^256-1:

    115792089237316195423570985008687907853269984665640564039457584007913129639935

标签:工程,temp,state,number,密码,素数,gmp,mpz
From: https://www.cnblogs.com/weihehahaha/p/17454648.html

相关文章

  • pnpm才是前端工程化项目的未来
    前言相信小伙伴们都接触过npm/yarn,这两种包管理工具想必是大家工作中用的最多的包管理工具,npm作为node官方的包管理工具,它是随着node的诞生一起出现在大家的视野中,而yarn的出现则是为了解决npm带来的诸多问题,虽然yarn提高了依赖包的安装速度与使用体验,但它依旧没有解决npm的依赖重......
  • 算法刷题记录:素数中的等差数列
    题目链接https://ac.nowcoder.com/acm/contest/19859/I题目分析模拟!模拟!模拟!下标要计算好。自己的思路是放发现两个相等的差时,说明至少可以输出了,也就是合法情况,然后用指针R往后扩展。我选择的R是闭区间的,即[L,R]的区间已经看过了,所以i可以直接从i+1开始看。所以R赋值给i后......
  • 《软件工程》结课总结
    经过一个学期的努力奋斗,我们的《软件工程》这一门课终于迎来了结束,回顾这一学期,我从这门课中不仅仅学到了我们需要的的专业知识,对于与人打交道的方法、软件程序设计的思想也有很大的提高,这与学期的努力与挫折,对于我的个人成长的意义是重大的。接下来我会从我在在一个学期学到了什......
  • win资源共享取消密码
    ......
  • 素数
    一、问题描述: 二、设计思路:  三、程序流程图:   四、代码实现:#include<stdio.h>#defineN1000#include<math.h>intmain(){intstart,end;intflag=1;intcount=0;scanf("%d%d",&start,&end);for(inti=start;i<=end;......
  • 算法刷题记录:素数五五
    题目链接https://ac.nowcoder.com/acm/contest/19859/E题目分析一道找规律的题,我们注意33,当33的长度一样,我们只要无脑添加4和8即可。4和8的关系与33的关系:有n个33,就有n-1个4或8。在此基础之上,因为会出现a和b的33长度不相同的情况,这时候我们只要统计a和b的33个数的差就行了......
  • 首次进入Mysql修改密码报“The MySQL server is running with the --skip-grant-table
    第一次安装完mysql,修改默认密码的时候,报“TheMySQLserverisrunningwiththe--skip-grant-tablesoptionsoitcannotexecutethisstatement”。先刷新mysql然后再重新修改密码即可。mysql>ALTERUSER'root'@'localhost'IDENTIFIEDBY'123456';ERROR1290(H......
  • 从流量密码到诚信密码
         我可能属于莫言笔下晚熟的人,抖音火了这么久了,去年应该才下载的抖音、这段时间也才开始沉浸式体验抖音,任何新兴的当红平台都理所当然的包罗万象,从最原始的以物换物、到前几年比较火的流量秘钥,从人知分享、到才艺展示,无数缤纷色彩呈现,让人喜不胜收、也措手不及。 ......
  • 2023.6.3——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......
  • 软件工程课程申请加分项目
      谢谢王老师送来的加分......