OpenSSL测试-大数
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 1. 基于OpenSSL的大数库计算2的N次方,N为你学号的后四位(5‘) 2. 基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5‘) 3. 用Python或bc命令验证计算的正确性(5’) 4. **提交代码(或代码链接)和运行结果截图**

代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
int main()
{
BN_CTX *r;
BIGNUM *a;
BIGNUM *b;
BIGNUM *c;
char *x;
char s[]="2";
char t[]="1325";
r = BN_CTX_new();
a = BN_new();
b = BN_new();
c = BN_new();
BN_dec2bn(&a, s);
BN_dec2bn(&b, t);
BN_exp(c,a,b,r);
x = BN_bn2dec(c);
printf("计算2^1325的值为:\n");
puts(x);
BN_free(a);
BN_free(b);
BN_free(c);
BN_CTX_free(r);
free(x);
return 0;
}
3.
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
int main()
{
BN_CTX *r[11];
BIGNUM *bn[12];
int i;
const char s[11][9]={"20191320","20191321","20191322","20191323","20191324","20191325","20191326","20191327","20191328","20191329","20191330"};
char* out;
char t[2]="1";
for(i=0;i<11;i++){
bn[i]=BN_new();
BN_dec2bn(&bn[i],s[i]);
r[i] = BN_CTX_new();
}
bn[11]=BN_new();
BN_dec2bn(&bn[11],t);
for(i=0;i<11;i++){
BN_mul(bn[11],bn[11],bn[i],r[i]);
}
out= BN_bn2dec(bn[11]);
puts(out);//打印出字符串
for(i=0;i<11;i++){
BN_free(bn[i]);
BN_CTX_free(r[i]);
}
BN_free(bn[i]);
free(out);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通