OpenSSL测试-大数

  1. 基于OpenSSL的大数库计算2的N次方,N为你学号的后四位(5‘)

  2. 基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5‘)

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

int main()
{
    BIGNUM * bn_rlt;
    BIGNUM * bn_1;
    BIGNUM * bn_1301;
    BN_CTX * ctx;
    char* show;

    ctx=BN_CTX_new();
    bn_rlt=BN_new();
    bn_1=BN_new();
    bn_1301=BN_new();

    BN_dec2bn(&bn_rlt,"1");
    BN_dec2bn(&bn_1,"1");
    BN_dec2bn(&bn_1301,"20191301");

    for(int i=1301;i<=1305;i++){
        BN_mul(bn_rlt,bn_rlt,bn_1301,ctx);
        BN_add(bn_1301,bn_1301,bn_1);
    }
    for(int i=1228;i<=1232;i++){
        BN_mul(bn_rlt,bn_rlt,bn_1301,ctx);
        BN_add(bn_1301,bn_1301,bn_1);
    }

    show=BN_bn2dec(bn_rlt);
    printf("b=%s\n",show);
    BN_free(bn_rlt);
    BN_free(bn_1);
    BN_free(bn_1301);
    BN_CTX_free(ctx);
    return 0;
}

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

int main()
{
    BIGNUM * bn_rlt;
    BIGNUM * bn_2;
    BN_CTX * ctx;
    char* show;
    ctx=BN_CTX_new();
    bn_rlt=BN_new();
    bn_2=BN_new();
    BN_dec2bn(&bn_rlt,"1");
    BN_dec2bn(&bn_2,"2");
    for(int i=0;i<1301;i++){
        BN_mul(bn_rlt,bn_rlt,bn_2,ctx);
    }
    show=BN_bn2dec(bn_rlt);
    printf("%s\n",show);
    BN_free(bn_rlt);
    BN_free(bn_2);
    BN_CTX_free(ctx);
    return 0;
}

用Python或bc命令验证计算的正确性(5’)

posted @ 2022-05-12 14:26  20191301  阅读(47)  评论(0编辑  收藏  举报