当前位置: 首页 > article >正文

课上测试:MIRACL共享库使用测试

MIRACL(MultiprecisionIntegerandRationalArithmeticC/c++Library)是著名的密码算法库,设法去官网下载安装MIRACL,提交安装过程截图或过程文本(3分).

去github官网下载.zip文件

在这里插入图片描述
使用如下命令进行解压

unzip -j -aa -L MIRACL-master.zip

解压后的文件目录:
在这里插入图片描述

使用bash命令构建静态库

bash linux64

测试

./pk-demo

在这里插入图片描述

编译运行附件中MIRACL的测试代码,提交编译、运行过程截图或过程文本(5分).

测试内容:
使用MIRACL库来进行大数运算。以下是代码的具体功能。

  • 初始化 MIRACL 系统,设置大数运算的环境。
  • 声明并初始化三个大数变量 a、b 和 c。
  • 对两个大数 a 和 b 进行加法运算,并将结果存储在 c 中。
  • 输出加法结果。
#include <stdio.h>
#include "miracl.h"int main() {// 初始化 MIRACLmiracl *mip = mirsys(5000, 10); // 5000 是精度(位数),10 是进制// 定义大整数big a, b, sum, difference, product, quotient, remainder, result;// 为大整数分配内存a = mirvar(0);b = mirvar(0);sum = mirvar(0);difference = mirvar(0);product = mirvar(0);quotient = mirvar(0);remainder = mirvar(0);result = mirvar(0);// 将字符串转换为大整数cinstr(a, "123456789012345678901234567890");cinstr(b, "987654321098765432109876543210");// 显示输入的数字printf("a = ");cotnum(a, stdout);printf("b = ");cotnum(b, stdout);// 执行加法add(a, b, sum);printf("\n加法结果 = ");cotnum(sum, stdout);// 执行减法subtract(b, a, difference);printf("减法结果 = ");cotnum(difference, stdout);// 执行乘法multiply(a, b, product);printf("乘法结果 = ");cotnum(product, stdout);// 执行除法divide(a, b, quotient);printf("商 = ");cotnum(quotient, stdout);// 使用 modulo 计算余数divide(a, b, product);printf("余数 = ");cotnum(product, stdout);// 执行乘方运算 (a^2) 使用乘方函数powmod(a, mirvar(2), b, result);  // 假设'b'为模数的简单幂模运算printf("乘方结果 (a^2 mod b) = ");cotnum(result, stdout);// 清理mirexit(); // 清理 MIRACLreturn 0;
}

运行结果
在这里插入图片描述

研究MIRACL,在testmiracl.c添加至少一项你的学习成果,提交代码,编译运行过程截图或过程文本(5分).

MIRACL 库的功能

MIRACL(Multiprecision Integer and Rational Arithmetic C/C++ Library) 是一个用于高性能密码学和数学计算的库,主要功能包括:

  1. 大数运算
    支持任意精度的整数和有理数运算。
    提供加法、减法、乘法、除法、模运算、幂运算等基本操作。
  2. 数论计算
    素数检测(如 Miller-Rabin 测试)。
    最大公约数(GCD)、最小公倍数(LCM)、模逆等计算。
  3. 椭圆曲线密码学(ECC)
    支持椭圆曲线上的点运算(如点加、点乘)。
    提供椭圆曲线数字签名算法(ECDSA)等。
  4. 公钥密码学
    支持 RSA、Diffie-Hellman 等公钥加密算法。
    提供大数的快速幂运算和模运算。
  5. 随机数生成
    提供密码学安全的伪随机数生成器。
  6. 其他功能
    多项式运算、矩阵运算、有限域运算等。

举例:

MIRACL 库的大数加法和乘法功能

#include <stdio.h>
#include "miracl.h"int main() {// 初始化 MIRACLmiracl *mip = mirsys(5000, 10); // 5000 是精度(位数),10 是进制// 定义大整数big a, b, sum, difference, product, quotient, remainder, result, gcd;// 为大整数分配内存a = mirvar(0);b = mirvar(0);sum = mirvar(0);difference = mirvar(0);product = mirvar(0);quotient = mirvar(0);remainder = mirvar(0);result = mirvar(0);gcd = mirvar(0);// 将字符串转换为大整数cinstr(a, "123456789012345678901234567890");cinstr(b, "987654321098765432109876543210");// 显示输入的数字printf("a = ");cotnum(a, stdout);printf("b = ");cotnum(b, stdout);// 执行加法add(a, b, sum);printf("\n加法结果 = ");cotnum(sum, stdout);// 执行减法subtract(b, a, difference);printf("减法结果 = ");cotnum(difference, stdout);// 执行乘法multiply(a, b, product);printf("乘法结果 = ");cotnum(product, stdout);// 执行除法divide(a, b, quotient);printf("商 = ");cotnum(quotient, stdout);// 使用 modulo 计算余数divide(a, b, product);printf("余数 = ");cotnum(product, stdout);// 执行乘方运算 (a^2) 使用乘方函数powmod(a, mirvar(2), b, result);  // 假设'b'为模数的简单幂模运算printf("乘方结果 (a^2 mod b) = ");cotnum(result, stdout);// 执行最大公约数运算xgcd(a, b, gcd, gcd, gcd); // 计算 a 和 b 的最大公约数printf("\n最大公约数 (GCD) = ");cotnum(gcd, stdout);// 清理mirexit(); // 清理 MIRACLreturn 0;
}

运行截图
在这里插入图片描述

编写installmiracl.sh脚本,从官网自动化安装MIRACL库到~/MIRACL目录,提交代码,编译、运行过程截图或过程文本(6分),

  • 要求:
    • ~/MIRACL目录已经安装了MIRACL,退出脚本
    • 把MIRACL官方源代码下载到~,并解压到~/你的八位学号MIRACL目录,然后删除下载的源代码
    • 要给出脚本的运行测试,保证testmiracl.c能正确运行

installmiracl.sh脚本如下:

#!/bin/bash# 设置安装目录
INSTALL_DIR="$HOME/MIRACL"
SOURCE_DIR="$HOME/20242817MIRACL"# 创建安装目录
mkdir -p "$INSTALL_DIR"
mkdir -p "$SOURCE_DIR"# 下载 MIRACL ZIP 包
echo "下载 MIRACL ZIP 包..."
wget https://github.com/miracl/MIRACL/archive/refs/heads/master.zip -O "$INSTALL_DIR/MIRACL.zip"# 检查下载是否成功
if [ ! -f "$INSTALL_DIR/MIRACL.zip" ]; thenecho "错误:下载 MIRACL ZIP 包失败!"exit 1
fi# 将源代码解压到学号目录
echo "将源代码解压到学号目录..."
unzip -j -aa -L "$INSTALL_DIR/MIRACL.zip" -d "$SOURCE_DIR"# 检查解压是否成功
if [ $? -ne 0 ]; thenecho "错误:将源代码解压到学号目录失败!"exit 1
fi# 进入安装目录
cd "$SOURCE_DIR"# 运行 linux64 配置脚本
echo "运行 linux64 配置脚本..."
bash linux64# 清理下载的 ZIP 包
echo "清理下载的 ZIP 包..."
rm "$INSTALL_DIR/MIRACL.zip"

在这里插入图片描述
在这里插入图片描述
安装成功。
在自动化脚本安装的目录里进行测试,证明MIRACL库可用,自动化脚本有效。

在这里插入图片描述

AI问答

  • 我:
    给我生成一个Ubuntu安装MIRACL的教程

  • AI:
    在这里插入图片描述

  • 我:
    MIRALC库是干什么的?有什么功能?

  • AI:
    在这里插入图片描述

相关文章:

课上测试:MIRACL共享库使用测试

MIRACL(MultiprecisionIntegerandRationalArithmeticC/cLibrary)是著名的密码算法库&#xff0c;设法去官网下载安装MIRACL&#xff0c;提交安装过程截图或过程文本&#xff08;3分&#xff09;. 去github官网下载.zip文件 使用如下命令进行解压 unzip -j -aa -L MIRACL-mast…...

网络编程知识预备阶段

1. OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时&#xff0c;更好地理解和…...

Echo服务详解与实现

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在网络编程中,Echo服务是一个非常基础且重要的服务,它的功能是接收客户端发送的数据,并将相同的数据返回给客户端。本文将详细介绍如何使用Python实现一个简单的Echo服务,并提供完整的代码实例及运行结…...

STM32微控制器_03_GPIO原理与应用

核心内容 STM32 GPIO基本原理&#xff08;熟悉&#xff09;GPIO输出功能HAL库编程实现的应用&#xff08;重点&#xff09;GPIO输入功能HAL库编程实现的应用&#xff08;重点&#xff09; 一.STM32 GPIO基本原理 1.GPIO简介 STM32的GPIO相当于STM32的四肢&#xff0c;一个S…...

零拷贝分析

kafka 零拷贝 请求 - 网口 - socket - 用户态 - 内核缓存区 - 内核态&#xff08;磁盘信息&#xff09; 磁盘 - 内核缓存区 - 用户缓存区 - 网络缓存区 零拷贝&#xff08;Zero-Copy&#xff09; 是一种高效的数据传输技术&#xff0c;旨在减少数据在内存中的拷贝次数&#x…...

爬虫逆向:详细讲述Android底层原理及机制

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Android系统架构1.1 Linux内核层1.2 硬件抽象层(HAL)1.3 系统运行库层1.4 应用框架层1.5 应用层二、Android启动过程三、进程与线程管理四、内存管理机制五、Binder机制六、安全机制七、电源管理机制八、Android …...

电容器基础观念

Take-away: 电容器容值&#xff0c;和「导体的几何形状」&#xff0c;「周围的介电材料」相关。电力线起于正电荷&#xff0c;终止于负电荷。金属互相越靠近&#xff0c;电容越大。Maxwell电容矩阵有负号&#xff0c;SPICE电容矩阵没有负号。Maxwell电容矩阵、SPICE电容矩阵可…...

Python 视频爬取教程

文章目录 前言基本原理环境准备Python安装选择Python开发环境安装必要库 示例 1&#xff1a;爬取简单直链视频示例 2&#xff1a;爬取基于 HTML5 的视频&#xff08;以某简单视频网站为例&#xff09; 前言 以下是一个较为完整的 Python 视频爬取教程&#xff0c;包含基本原理…...

NumPy系列 - 创建矩阵

目录 前传直接创建数组就只是创建数组1. np.array()2. np.arange()3. np.ones()4. numpy.ones_like()5. np.zeros()6. numpy.zeros_like() 定义数据类型 参考资料 前传 由于&#xff0c;某人在上智能相关课程的时候&#xff0c;总想着一大堆的事情&#xff0c;统计股市涨跌&am…...

从Instagram到画廊:社交平台如何改变艺术家的展示方式

从Instagram到画廊&#xff1a;社交平台如何改变艺术家的展示方式 在数字时代&#xff0c;艺术家的展示方式正在经历一场革命。社交平台&#xff0c;尤其是Instagram&#xff0c;已经成为艺术家展示作品、与观众互动和建立品牌的重要渠道。本文将探讨社交平台如何改变艺术家的…...

谈谈 TypeScript 中的联合类型(union types)和交叉类型(intersection types),它们的应用场景是什么?

一、联合类型&#xff08;Union Types&#xff09; 核心概念 使用管道符 | 表示多选一关系&#xff0c;典型场景&#xff1a;处理可能存在多种类型的变量 // 基础示例&#xff1a;处理数值型ID&#xff08;number&#xff09;或哈希型ID&#xff08;string&#xff09; type…...

华为OD机试 - 最长的完全交替连续方波信号(Java 2023 B卷 200分)

题目描述 给定一串方波信号,要求找出其中最长的完全连续交替方波信号并输出。如果有多个相同长度的交替方波信号,输出任意一个即可。方波信号的高位用1标识,低位用0标识。 说明: 一个完整的信号一定以0开始并以0结尾,即010是一个完整的信号,但101,1010,0101不是。输入的…...

✎ 一次有趣的经历

&#x1f4c6;2025年3月17日 | 周一 | ☀️晴 &#x1f4cd;今天路过学院楼7&#xff0c;见到了满园盛开的花&#x1f33a;&#xff0c;心情瞬间明朗&#xff01; &#x1f4cc;希望接下来的日子也能像这些花一样&#xff0c;充满活力&#x1f525;&#xff01; &#x1…...

【Spring】第二弹:通过反射机制初步理解 IoC

一、Java 反射机制 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机…...

快!快!快!NDPP时延测试数据公布!

在全方位认识NDPP第3期《NDPP在金融场景的应用》中&#xff0c;我们重点介绍了NDPP的典型应用场景行情解码硬件加速和策略计算加速&#xff0c;并帮助某百亿私募用户基于NDPP实现期货业务加速的案例。 近期&#xff0c;中科驭数凭借低时延产品荣获信创“大比武”行业融合赛道三…...

激光雷达“开卷”2.0,头部Tier1入局

高阶智驾的普及&#xff0c;正在催生激光雷达市场的巨大潜在增长空间。 本周&#xff0c;汽车激光雷达主力供应商之一的禾赛科技发布财报&#xff0c;去年第四季度激光雷达总交付量为222,054台&#xff0c;同比增长153.1%&#xff0c;超过2023年全年。2024全年激光雷达总交付量…...

STM32 - 在机器人领域,LL库相比HAL优势明显

在机器人控制器、电机控制器等领域的开发&#xff0c;需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以&#xff0c;大家常用的HAL库明显不符合要求。再加上&#xff0c;我们学习一门技术&#xff0c;一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...

力扣No.376.摆动序列

题目&#xff1a; 链接&#xff1a; https://leetcode.cn/problems/wiggle-subsequence/description/ 代码&#xff1a; class Solution {public int wiggleMaxLength(int[] nums) {int nnums.length;//状态表示:int[] fnew int[n];int[] gnew int[n];//初始化:for(int i0;i…...

找工作、创业的思考和出路

最近有几位朋友在找工作&#xff0c;以及探索职场出路&#xff0c;与他们聊了一些关于找工作和职业发展的话题。而这些话题对大多数职场人来说&#xff0c;都是必须考虑和面对的问题。今天就基于这两个话题展开聊聊。 首先&#xff0c;初入职场时&#xff0c;工作是相对容易找…...

IP关联是什么?怎么避免?

在跨境电商的道路上&#xff0c;大家好&#xff01;今天想和大家聊一聊一个非常重要的话题&#xff0c;那就是IP关联的问题。在商业活动中&#xff0c;了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来&#xff0c;我们将深入探讨IP关联的概念、影响及如何有效防止这一…...

C语言中qsort函数的详解,以及模拟

引言 C语言中qsort函数的详解和模拟实现qsort函数&#xff0c;这里为了使用冒泡排序来模拟qsort函数 一、详解qsort函数 在 C 语言中&#xff0c;qsort 函数是一个标准库函数&#xff0c;用于对数组进行快速排序&#xff08;Quick Sort&#xff09;。它位于 <stdlib.h>…...

9、讲一讲你理解的虚拟内存【中高频】

计算机早期&#xff0c;CPU 是直接操作 物理内存&#xff08;Physical Memory&#xff09;的&#xff0c;但这会导致 内存空间无法完全隔离&#xff0c;一个程序修改了另一个程序的地址空间&#xff0c;就会导致程序崩溃&#xff1b;同时物理内存大小有限&#xff0c;一旦超出这…...

算法刷题整理合集(四)

本篇博客旨在记录自已的算法刷题练习成长&#xff0c;里面注有详细的代码注释以及和个人的思路想法&#xff0c;希望可以给同道之人些许帮助。本人也是算法小白&#xff0c;水平有限&#xff0c;如果文章中有什么错误或遗漏之处&#xff0c;望各位可以在评论区指正出来&#xf…...

高数1.5 极限的运算法则

1. 预备知识 2.四则求极限法则 3.复合运算求极限法则...

【鸿蒙开发】Hi3861学习笔记- 定时器中断

00. 目录 文章目录 00. 目录01. 概述02. 定时器相关API2.1 hi_timer_create2.2 hi_timer_start2.3 hi_timer_stop2.4 hi_timer_delete 03. 硬件设计04. 软件设计05. 实验现象06. 附录 01. 概述 定时器&#xff0c;顾名思义就是用来计时的&#xff0c;我们常常会设定计时或闹钟…...

Spring Cloud Config 快速介绍与实例

Spring Cloud Config 是什么? Spring Cloud Config 是一个用于分布式系统的配置管理工具,提供集中化的外部配置支持。它适用于微服务架构,能够将各个服务的配置集中存储在服务端(如 Git 仓库),客户端按需动态获取配置,解决了配置分散、环境切换复杂等问题。 Spring Cl…...

Power Apps 技术分享:画布应用使用表单控件

前言 表单控件&#xff0c;是画布应用里一个非常好用的控件&#xff0c;我们今天简单介绍下&#xff0c;如何使用这个控件。 正文 1.首先&#xff0c;我们需要有一个数据源&#xff0c;我们这里用上一篇博客新建的数据源&#xff0c;如下图&#xff1a; 2.新建一个页面&#xf…...

【数据库】Data Model(数据模型)数据模型分析

理解图片中的 Data Model&#xff08;数据模型&#xff09;是学习数据库设计和应用程序开发的重要一步。作为初学者&#xff0c;你可以通过比喻和简单的解释来理解这些概念以及它们之间的联系。以下是对图片中数据模型的详细分析&#xff0c;以及如何理解它们之间的关系。 1. 数…...

【Unity】 HTFramework框架(六十二)Agent编辑器通用智能体(AI Agent)

更新日期&#xff1a;2025年3月14日。 Github源码&#xff1a;[点我获取源码] Gitee源码&#xff1a;[点我获取源码] 索引 编辑器通用智能体AIAgent类Friday&#xff08;星期五&#xff09;启用智能体设置智能体类型开放智能体权限智能体交互资源优化批处理运行代码联网搜索休闲…...

Elasticsearch 滚动索引(Rollover Index)详解

文章目录 1、滚动索引的作用2、滚动索引的用法2.1 核心概念2.2 实现步骤 3、适用场景4、与其他技术的结合使用5、案例&#xff1a;日志数据的滚动索引5.1 场景描述5.2 实现步骤 6、示例&#xff1a;结合索引生命周期管理&#xff08;ILM&#xff09;6.1 场景描述6.2 实现步骤 7…...