openssl大數
阿新 • • 發佈:2022-05-12
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; }
測試結果為: