• OpenSSL测试大数


    OpenSSL测试-大数

    1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
    2. 基于OpenSSL的大数库计算2的N次方,N为你学号的后四位(5‘)
    3. 基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5‘)
    4. 用Python或bc命令验证计算的正确性(5’)
    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验证

    可知结果正确

  • 相关阅读:
    Google Web 字体 API 访谈
    关于如何跨越抄袭程序阶段的一些断想
    DirectX开发中找不到dxtrans.h的问题的解决
    Google Web 字体 API 访谈
    NetBeans 6.9 发布后选版 1 已经可用
    Thrift java服务器与客户端示例
    Wing IDE Pro v. 4.1.91 Python Wingware Python IDE
    tkang's blog
    Thrift的简单使用
    maven加载自己的包
  • 原文地址:https://www.cnblogs.com/harperhjl/p/16262285.html
Copyright © 2020-2023  润新知