密码工程-大素数
任务详情
- 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
- 利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现 GenerateLargePrime 函数(10‘)
- 在测试代码中产生一个在范围l = 2^255至u = 2^256-1内的素数。(5‘)
- 用OpenSSL验证你产生的素数是不是正确(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; }
运行
57896044618658097711785492504343953926634992332820282019728792003956564819968(2^255)
87139054090139030466026947200548202781995406748728297977356676675333326813291(大素数1)
109048451684500268765616924205049137117328249740621035126803202518230874202713(大素数2)
115792089237316195423570985008687907853269984665640564039457584007913129639935(2^256-1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~