1. 程式人生 > 其它 >openssl大數

openssl大數

1、基於OPENSSL的大數庫編寫測試程式碼測試大數運算,計算2的N次方,N為你學號的後四位

#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] = "2";
	char t[512+1] = "2DC";
	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、 基於OpenSSL的大數庫計算你以及前面5位同學和後面5位同學的8位學號的乘積,N為你學號的後四位

我的學號是20191211
前面5位同學是20191210、20191209、20191208、20191207、20191206
後面5位同學是20191212、20191213、20191214、20191215、20191216

測試程式碼為:

#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] = "2019121620191217201912182019121920191220";
	    char t[512+1] = "209121120191212201912132019121420191215";
	    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;
}

測試結果為: