OpenSSL测试-大数

Posted 20201212油菜园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenSSL测试-大数相关的知识,希望对你有一定的参考价值。

任务详情

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

任务过程

1. 计算2的1212次方

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
//20201212
int main()

        BN_CTX *r[3];
        BIGNUM *a;
        BIGNUM *b;
        BIGNUM *c;
        char s[512+1] = "2";
        char t[512+1] = "4bc"; //1212
	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;

2. 计算你以及前面5位同学和后面5位同学的8位学号的乘积

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
//20201212
int main()

    BN_CTX *r[11];
    BIGNUM *bn[12];
    int i;
    const char s[11][9] = "20201207", "20201208", "20201209", "20201210", "20201211", "20201212", "20201213", "20201214", "20201215", "20201216", "20201217";
    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;

 

 
 

以上是关于OpenSSL测试-大数的主要内容,如果未能解决你的问题,请参考以下文章

OpenSSL测试-大数

openSSL学习-0

openssl

测试Apache使用Openssl及修改Openssl加密算法执行顺序

OpenSSL测试-SM3

测试不良版本的 openssl / php 安装