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

    复制代码

     

  • 相关阅读:
    Distributed
    Archi
    SpringCloud
    Java 多线程
    Java 基础
    Java 基础
    Java 基础
    Java 基础
    python--all与any
    pandas--apply/applymap/map
  • 原文地址:https://www.cnblogs.com/2902480848sy/p/16262416.html
Copyright © 2020-2023  润新知