OpenSSL测试-大数

任务详情

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

任务过程

计算2的1223次方,代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
//20191223
int main()
{
        BN_CTX *r[3];
        BIGNUM *a;
        BIGNUM *b;
        BIGNUM *c;
        char s[512+1] = "2";
	char t[512+1] = "4c7";
	char *x;
        r[0] = BN_CTX_new();
        a = BN_new();
        b = BN_new();
        c = BN_new();
        BN_hex2bn(&a, s);
        BN_hex2bn(&b, t);
        BN_exp(c, a, b, r[0]);//r=pow(a,b)
        x = BN_bn2dec(c);
        puts(x);
        BN_free(a);
        BN_free(b);
        BN_free(c);
        BN_CTX_free(r[0]);
        free(x);
        return 0;
}

运行结果:

第二题代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>

int main()
{
        BN_CTX *r[3];
        BIGNUM *a;
        BIGNUM *b;
        BIGNUM *c;
        char s[512+1] = "2019121820191219201912202019122120191222";
	    char t[512+1] = "2019122420191225201912262019122720191228";
	    char *x;
        r[0] = BN_CTX_new();
        a = BN_new();
        b = BN_new();
        c = BN_new();
        BN_dec2bn(&a, s);
        BN_dec2bn(&b, t);
        BN_mul(c, a, b, r[0]);//r=mul(a,b)
        x = BN_bn2dec(c);
        puts(x);
        BN_free(a);
        BN_free(b);
        BN_free(c);
        BN_CTX_free(r[0]);
        free(x);
        return 0;
}

运行结果:

posted @   20191223张俊怡  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示