OpenSSL測試-大數
阿新 • • 發佈:2022-05-12
OpenSSL測試-大數
- 在openEuler(推薦)或Ubuntu或Windows(不推薦)中完成下面任務
- 基於OpenSSL的大數庫計算2的N次方,N為你學號的後四位(5‘)
- 基於OpenSSL的大數庫計算你以及前面5位同學和後面5位同學的8位學號的乘積,N為你學號的後四位(5‘)
- 用Python或bc命令驗證計算的正確性(5’)
- 提交程式碼(或程式碼連結)和執行結果截圖
在openeuler環境下
基於OpenSSL的大數庫計算2的N次方,N為你學號的後四位
#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[]="1315"; 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);//計算2^n次方 x = BN_bn2dec(c);//把計算結果(大數)轉化成10進位制數 puts(x);//打印出x BN_free(a); BN_free(b); BN_free(c); BN_CTX_free(r); free(x); return 0; }
基於OpenSSL的大數庫計算你以及前面5位同學和後面5位同學的8位學號的乘積,N為你學號的後四位
#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]={"20191310","20191311","20191312","20191313","20191314","20191315","20191316","20191317","20191318","20191319","20191320"}; 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]); //計算11個同學學號的乘積 } 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; }
bc驗證
可知結果正確