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

密码工程-大素数

时间:2023-06-04 16:12:27浏览次数:35  
标签:prime 工程 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. 提交代码和运行结果截图

代码分析

#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;
}

编译实现

gcc big.c -o big -lgmp
./big

运行结果

81453251508306472626322650422738268817040832714932998071908453138966836955141

标签:prime,工程,temp,state,number,密码,素数,gmp,mpz
From: https://www.cnblogs.com/hsjy-love/p/17455816.html

相关文章

  • 利用Ant与Proguard混淆引用的子工程项目jar包及打war包
    当前的web项目有引用到子工程项目,而且多个子工程项目也有引用到其它的工程项目,现要求利用Ant自动将web项目打包成war包,其中引用到的子工程项目需打成jar包,而且必须是混淆后的jar包。其中混淆代码的工具选择了开源的Proguard([url]http://proguard.sourceforge.net/[/url]),可以运行p......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • PTA数素数
    题目描述//package蓝桥2023czw;importjava.util.Scanner;importjava.util.ArrayList;publicclassMain{publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);intn=input.nextInt();intm=input.nextInt......
  • java软件开发工程师实习求职常见面试题
    1、请说出作用域public,private,protected,以及不写时的区别这四个作用域的可见范围如下表所示。说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。 作用域   当前类同一package子孙类其他packagepublic   √    √         √      ......
  • Proton Mail 推出开源密码管理器
    导读Proton是欧洲核子研究中心(CERN)的科学家于2013年在瑞士日内瓦创立的,其最知名的应该就是电子邮件服务ProtonMail,主打端到端加密、安全和隐私保护。日前他们推出了一个新产品——开源密码管理器ProtonPass。ProtonPass是Proton社区很多用户都希望增加的服......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • 写给Android工程师的协程指南
    这是一份写给Android工程师的协程指南,希望在平静的2023,给大家带来一些本质或者别样的理解。引言在Android的开发世界中,关于异步任务的处理一直不是件简单事。面对复杂的业务逻辑,比如多次的异步操作,我们常常会经历回调嵌套的情况,对于开发者而言,无疑苦不堪言。当Kotlin协程出......
  • stm32空工程结构目录(仅供参考)
    寄存器版本在寄存器版本中,需要导入的外部文件只有stm32的启动文件,也就是一个以.s结尾的汇编文件可以手动为链接文件和目标文件创建文件夹,在配置中设置保存的目录即可在寄存器版本中,需要实现systeminit函数,为空即可故:寄存器版本对项目结构的依赖性较低库函数版本项目结构方面......
  • 密码工程-大素数
    密码工程-大素数任务在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正......
  • pnpm才是前端工程化项目的未来
    前言相信小伙伴们都接触过npm/yarn,这两种包管理工具想必是大家工作中用的最多的包管理工具,npm作为node官方的包管理工具,它是随着node的诞生一起出现在大家的视野中,而yarn的出现则是为了解决npm带来的诸多问题,虽然yarn提高了依赖包的安装速度与使用体验,但它依旧没有解决npm的依赖重......