首页 > 其他分享 > OpenSSL测试-大数

OpenSSL测试-大数

时间:2023-05-10 09:03:57浏览次数:31  
标签:16 bn 大数 OpenSSL 测试 include BN

OpenSSL测试-大数
20201331 黄文刚
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务

  1. 基于OpenSSL的大数库计算1000内的素数的乘积(5‘)
  2. 基于OpenSSL的大数库计算你以及后面15位同学的8位学号(数字)的乘积(5‘)
  3. 用Python或bc命令验证计算的正确性(5’)
  4. 提交代码(或代码链接)和运行结果截图

一、基于OpenSSL的大数库计算1000内的素数的乘积

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

int is_prime(int num)
{
    if (num < 2)
        return 0;
    else if (num == 2)
        return 1;
    else if (num % 2 == 0)
        return 0;
    else
    {
        int i;
        for (i = 3; i <= num / 2; i += 2)
        {
            if (num % i == 0)
                return 0;
        }
        return 1;
    }
}

int main()
{
    BIGNUM *result = BN_new();
    BIGNUM *num = BN_new();
    BN_CTX *r = BN_CTX_new();
    int i;

    BN_set_word(result, 1);

    for (i = 2; i < 1000; i++)
    {
        if (is_prime(i))
        {
            BN_set_word(num, i);
            BN_mul(result, result, num, r);
        }
    }

    char *result_str = BN_bn2dec(result);
    printf("%s\n", result_str);

    BN_free(result);
    BN_free(num);
    BN_CTX_free(r);
    OPENSSL_free(result_str);

    return 0;
}

二、基于OpenSSL的大数库计算你以及后面15位同学的8位学号(数字)的乘积

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <openssl/bn.h>
int main()
{
    BN_CTX *r[16];
    BIGNUM *bn[12];
    int i;
    const char s[16][9] = {"20201331", "20201332", "20201301", "20201302", "20201303", "20201304", "20201305", "20201306", "20201307", "20201308", "20201309","20201310","20201311","20201312","20201313","20201314"};
    char *out;
    char t[2] = "1";
    for (i = 0; i < 16; i++)
    {
        bn[i] = BN_new();
        BN_dec2bn(&bn[i], s[i]);
        r[i] = BN_CTX_new();
    }
    bn[11] = BN_new();
    BN_dec2bn(&bn[16], t);
    for (i = 0; i < 16; i++)
    {
        BN_mul(bn[16], bn[16], bn[i], r[i]);
    }
    out = BN_bn2dec(bn[16]);
    puts(out); //打印出字符串
    for (i = 0; i < 16; i++)
    {
        BN_free(bn[i]);
        BN_CTX_free(r[i]);
    }
    BN_free(bn[i]);
    free(out);
    return 0;
}

三、用Python或bc命令验证计算的正确性

标签:16,bn,大数,OpenSSL,测试,include,BN
From: https://www.cnblogs.com/killerqueen4/p/17386907.html

相关文章

  • 入门1-pytest测试框架功能及常用第三方插件介绍
    安装1. 安装Python2. 安装pytest: pipinstall-Upytest3. 安装常用插件pipinstall-rrequirement.txtPS: 常用插件:pytestallure-pytestrequestsPyYAMLpandasopenpyxljsonpathrequests_toolbeltPrettyTablepytest-htmlpytest-xdist https://docs.py......
  • 入门8-Pytest部分测试用例的前后置(fixture)(2-conftest.py结合)
    conftest.py文件专门用来存放fixture的文件,名称固定不能修改。conftest.py中的所有方法在调用时都不需要导包一个用例可以同时调用多个conftest.py中的多个方法一般conftest.py中的方法autouse=True, 自动执行。conftest.py放在最外层,使用scope="session"时,整个项目开头执......
  • 编程打卡:面向对象程序设计测试
    面向对象程序设计测试#include<iostream>#include<iomanip>usingnamespacestd;classPoint{protected:doublex,y;public:Point(doublea=0,doubleb=0):x(a),y(b){cout<<"Pointconstructorcalled\n";......
  • 【数据库测试】【shell脚本】查询同一个SQL执行多次,并统计每次耗时
    场景说明在数据库查询中会常见coldrun与hotrun,hotrun是指将同一个SQL连续运行多遍。运行脚本创建一个run.sh直接复制如下脚本-注意修改数据库的连接IP与密码等-queries2.sql存放查询的SQL,请将queries2.sql文件与run.sh放在同一个目录下,若不在同一个目录,注意改SQL的文件......
  • 带你完成数据库的clickbench性能测试(小白都能看懂)
    clickbench官网链接:https://benchmark.clickhouse.com/如下采用的数据库为分析型数据库支持MySQL协议,其他所有的数据库操作方法均类似测试背景利用clickhouse的clickbench测试数据与查询SQL对AtomData进行了性能测试,所有的测试方法均与其他clickbench上的其他产品一致。预期......
  • win11虚拟机安装测试
    1.环境本地环境:VmwareEsxi6.5其他适用环境:Vmware,kvm2.安装遇到报错:此电脑不符合最低安装要求  解决方法:shift+f10唤起cmdcmd界面输入regedit打开注册表编辑器 在HKEY_LOCAL_MACHINE\SYSTEM\Setup右击新建一个项,命名为LabConfig,在该项右击新建三个DWORD(32位)......
  • VOC标签格式转yolo格式并划分训练集和测试集
    VOC标签格式转yolo格式并划分训练集和测试集经常从网上获取一些目标检测的数据集资源标签的格式都是VOC(xml格式)的,而yolov5训练所需要的文件格式是yolo(txt格式)的,就需要对xml格式的标签文件转换为txt文件。同时训练自己的yolov5检测模型的时候,数据集需要划分为训练集和验证集。......
  • 软件测试面试-编程(电子书)
    C++是面向过程也面向对象的语言,具有预处理器、预处理器指令和宏、模板、对象、封装、继承、多态的特性。1、C++程序的内存通常如何分配?解答:全局数据区:通常存储全局变量、静态数据和常量代码区:所有类成员函数和非成员函数代码栈区:执行函数时分配的局部变量、函数参数、返回......
  • 大数定律和中心极限定理
    《中心极限定理》由前面我们可以知道:正态分布完全可由它的数学期望和方差所确定 对于随机变量X1,X2.....Xn,他们相互独立,服从同一分布且具有数学期望(均值)E(Xi)=u,方差D(Xi)= σ^2那么∑Xi~N(nu,n σ^2)即Z=(∑Xi-nu)/(√n* σ) ~ N......
  • 1000个已成功入职的软件测试工程师简历经验总结:软件测试工程师简历项目经验怎么写?(含
    一、前言:浅谈面试 面试是我们进入一个公司的门槛,通过了面试才能进入公司,你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试,得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一下笔者十年测试生涯的面试总结!软件测试面试常......