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

密码工程-大素数

时间:2024-06-16 16:34:08浏览次数:13  
标签:工程 temp state number 密码 素数 gmp mpz

任务详情

在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区间内的随机素数)
    image

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

运行

image

57896044618658097711785492504343953926634992332820282019728792003956564819968(2^255)
70907801182686810441628914638291098357943705721662653294993757427611873632379(大素数1)
81453251508306472626322650422738268817040832714932998071908453138966836955141(大素数2)
115792089237316195423570985008687907853269984665640564039457584007913129639935(2^256-1)

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

相关文章

  • 外环境干扰下输变电工程声级测量装置开发及应用
    目录1绪论11.1引言11.2国内外研究现状11.2.1声级计技术11.2.2输变电工程声级抗干扰检测技术41.3主要研究内容51.4研究目标与技术路线51.4.1研究目标51.4.2技术路线52输变电工程与其外环境差异性噪声特性研究72.1变电站主要噪声......
  • 业务流程外包(BPO)、IDC驻场运维以及IDC工程实施
    在信息技术日新月异的今天,企业对于信息技术服务外包(ITO服务)的需求日益增加。联通作为领先的通信服务提供商,凭借其在信息技术领域的深厚积累,为客户提供了一站式的ITO服务,涵盖了业务流程外包(BPO)、IDC驻场运维以及IDC工程实施等三大类别,旨在帮助企业降低运营成本,提高业务效率。一、......
  • 大模型技术工程师:抓住时代机遇,成为行业精英_
    伴随AI大模型的火热,中国科技大厂们正在掀起一场「跑步AI化」的风暴。从顶层战略到业务线重构,AI无疑已成为大厂们押注未来的新故事。大模型时代已经到来大模型已成为全球竞争热点,一个大模型时代已经到来。大模型具备三个特点:规模大,需达到百亿参数级别;涌现性,能够产生预料之......
  • P7246 手势密码
    Statement:有一棵\(n(n\le3\times10^6)\)个点的树,每个点有点权\(w_i\)。定义一次操作为选择树上的一条简单路径,并将这条简单路径上的所有点点权减去\(1\)。问至少需要多少次操作,使树上所有点的点权恰好变为\(0\)。Solution:对于这样的问题不好入手,则优先考虑转化。......
  • 在 Microsoft SQL Server 2012 中,修改密码的方法与 SQL Server 2000 相比有所变化,但基
    在MicrosoftSQLServer2012中,修改密码的方法与SQLServer2000相比有所变化,但基本思路是相似的。以下是几种常见的方法:使用SQLServerManagementStudio(SSMS):这仍然是最常见和推荐的方法。通过打开SQLServerManagementStudio,连接到相应的SQLServer实例,然后......
  • 如何使用CCS9.3打开CCS3.0工程
    如何使用CCS9.3打开CCS3.0工程点菜单栏上的project,选择ImportLegacyCCSv3.3Porjects…,弹出对话框,通过Browse…按钮导入一个3.3版本的工程项目;选择.pjt文件,选择Copyprojectsintoworlkspace右击选择Properties删除原来的include,从新添加工程include一般在pr......
  • 45道工程模块化高频题整理(附答案背诵版)
    1.简述前端自动化构建工具?前端自动化构建工具是指用于自动化完成前端开发中重复性任务的软件工具,如代码压缩、文件合并、预处理器编译(如Sass、Less)、代码检查、自动刷新浏览器、模块打包等。这些工具的目的是提高开发效率,保持代码质量,以及优化项目的最终输出。常见的前端......
  • 密码工程-大素数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务利用大整数库(GMP或者OpenSSL),参考《密码工程》p113伪代码实现GenerateLargePrime函数(10‘)在测试代码中产生一个在范围l=2^255至u=2^256-1内的素数。(5‘)用OpenSSL验证你产生的素数是不是正确(5’)提交......
  • 运维shell脚本之测试mysql密码正确与否
    shell脚本实战:测试mysql密码正确与否在迁移过程中,常有批量迁移数据库的情况,因此在割接前,需要批量测试一次割接后的数据库信息是否配置正常,故写了一个shell脚本用于测试数据库密码是否正确有误,具体步骤如下:测试前,需要测试当前服务器是否已安装mysql,可通过命令进行测试:mysq......
  • SSH实践生成密码
    $ssh-keygen-trsa-P''-f~/.ssh/id_rsa$cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys$chmod0600~/.ssh/authorized_keys-t:指定生成密钥类型(rsa、dsa、ecdsa等)-P:指定passphrase,用于确保私钥的安全-f:指定存放密钥的文件(公钥文件默认和私钥同目录下,不同的是,存......