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

密码工程-大素数

时间:2024-06-07 15:23:00浏览次数:15  
标签:prime 工程 temp state number 密码 素数 gmp mpz

任务详情

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

  测试

echo "2^255" | bc
57896044618658097711785492504343953926634992332820282019728792003956\
564819968
echo "2^256-1" | bc
11579208923731619542357098500868790785326998466564056403945758400791\
3129639935

  代码

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

  运行

sudo apt-get update
sudo apt-get install libgmp-dev


rjx@rjx-VirtualBox:~/test/2024.6.7$ ./test
Large prime: 102245892909274590127127437346763990236079888116777219746583252655183600606079
rjx@rjx-VirtualBox:~/test/2024.6.7$ ./test
Large prime: 85599317078990932562422224999979696330958333053715948349991704892713360607561

  验证

  • 57896044618658097711785492504343953926634992332820282019728792003956564819968(2^255)
  • 102245892909274590127127437346763990236079888116777219746583252655183600606079(大素数1)
  • 85599317078990932562422224999979696330958333053715948349991704892713360607561(大素数2)
  • 115792089237316195423570985008687907853269984665640564039457584007913129639935(2^256-1)

标签:prime,工程,temp,state,number,密码,素数,gmp,mpz
From: https://www.cnblogs.com/20211107rjx/p/18237262

相关文章

  • 知乎(1-5期)-AI大模型全栈工程师培养计划,做ChatGPT浪潮中顶尖的超级个体
    知乎(1-5期)-AI大模型全栈工程师培养计划,做ChatGPT浪潮中顶尖的超级个体一.前言:1.AI形式目前人工智能和大模型一定是前景非常广阔的赛道,现在陆续出现的模型训练岗,模型技术岗,像有些大厂已经开始不再招聘JAVA开发,所以关于大模型的岗位一定是雨后春笋的喷发2.程序员自身的发展......
  • LLM大语言模型算法特训,带你转型AI大语言模型算法工程师
    LLM大语言模型算法特训,带你转型AI大语言模型算法工程师 LLM(大语言模型)是指大型的语言模型,如GPT(GenerativePre-trainedTransformer)系列模型。以下是《LLM大语言模型算法特训,带你转型AI大语言模型算法工程师》课程可能包含的内容:1.深入理解大语言模型:课程可能会介绍大......
  • SpaceX 首席火箭着陆工程师 MIT论文详解:非凸软着陆最优控制问题的控制边界和指向约束
    上一篇blog翻译了LarsBlackmore(LarsBlackmoreisprincipalrocketlandingengineeratSpaceX)的文章,SpaceX使用CVXGEN生成定制飞行代码,实现超高速机载凸优化。利用地形相对导航实现了数十米量级的导航精度,着陆器在着陆过程中成像行星表面并将特征与机载地图匹配......
  • 前端工程化工具系列(八)——Commitizen(v4.3.0):Git提交规范化工具
    在前端工程化工具系列(四)——Commitlint(v19.3.0):规范化Git提交中曾介绍过commitlint,它主要负责检查提交信息的规范性。而本文中的commitizen,则是提供给了一个交互式的命令行界面,引导开发者按照预定义的格式填写提交信息。它俩的目的都是规范git提交。按照使用习惯......
  • ChatGPT Prompt技术全攻略-入门篇:AI提示工程基础
    系列篇章......
  • Maven实战案例:搭建微服务Maven工程架构
    1.1项目需求和结构分析需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。项目架构:1.用户服务:负责处理用户相关的逻辑,例如用户信息的管理、用户注册、登录等。2.订单服务:负责处理订单相关的逻辑,例如订单的创建、订单支付、退货、订单查看等。......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • HC32F4A0PITB创建工程模板
    使用芯片第一步网上搜索如何创建工程模板,如何下载和查看资料!!!本教程使用的开发板是【立创·天空星HC32F4A0PITB开发板】网址:https://lckfb.com/project/detail/lckfb-lspi-skystar-hc32f4a0pitb-lite?param=baseInfo开源原理图和PCB,资料免费!!!!感谢立创开发板团队的开源!!一、......
  • 密码工程-小素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,使用git管理过程,至少提交三次参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(5’)写出测试代码,至少包括......
  • 密码工程-扩展欧几里得算法
    任务要求在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,要用git记录实现过程,gitcommit不能低于5次严格按照《密码工程》p112伪代码实现ExtendedGCD(inta,intb,int*k,int*u,int*v)算法(10')2.根据ExtendedGCD实现计算有限域模除的函数intModDiv(inta,in......