参考:http://blog.sina.com.cn/s/blog_53fdf1590102y9ox.html

MIRACL(Multiprecision Integer and RationalArithmetic C/c++ Library)是一套由Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含了RSA 公开密码学、Diffie-Hellman密钥交换(Key Exchange)、AES、DSA数字签名,还包含了较新的椭圆曲线密码学(Elliptic CurveCryptography)等等。运算速度快,并提供源代码。

经过实验,Kali-Linux和Ubuntu 16.04都可成功编译与运行!!!

最近做一道CTF题,里面用到了椭圆曲线加密算法,为了了解它的处理流程,特意下载了MIRACL源码准备使用。刚开始用windows平台下VS 2008编译,可以生成库文件miracl.lib。但新建项目写一个测试程序并添加该miracl.lib编译出现了一堆错误,总也找不到原因,只好转到Kali Linux下试试,下面是具体过程。

1、 从https://github.com/miracl/MIRACL/archive/master.zip下载github下的项目源码。我下载的是.zip压缩包,名字为MIRACL-master.zip。

2、 建立一个目录miracl用来放置源码

mkdir miracl

3、 将下载成功的MIRACL-mater.zip放到上述创建的miracl目录

cd /path/to/miracl
cp /path/to/MIRACL-mater.zip ./

4、 解压zip包,把所有独立的文件都放在这个目录,即将所有非目录的文件解压在当前目录下

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

5、 用shell文件编译。如果是64位系统用linux64,如果是32位系统用linux。由于我的系统为64位Kali Linux,因此执行如下命令

bash linux64

6、 运行源码提供的示例代码 pk-demo,测试一下是否编译成功。

./pk-demo

这个程序是个简单检验,迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange)协议的正确性,如果输出无错误则表示编译完成

编译完了,自然是要用的,下面介绍两种在C程序中使用miracl库的方法。

方法一:

1、 源码编译完后的必需的文件是两个头文件miracl.h和mirdef.h以及编译后的静态函数库miracl.a,需要在自己写的C程序中使用。

2、 输入如下代码,命名为main.c

mkdir miracl-test
cd miracl-test
nano main.c
#include "miracl.h"

void main()
{
big a, b, c;
miracl *mip = mirsys(, );
a=mirvar();
b=mirvar();
c=mirvar();
add(a, b, c);
cotnum(c, stdout);
}

将miracl.a, miracl.h, mirdef.h拷贝到与main.c所在目录,浏览一下当前项目目录下的文件

cp ../miracl/miracl.a miracl.a
cp ../miracl/miracl.h miracl.h
cp ../miracl/mirdef.h mirdef.h
ls

3、 gcc编译并输出main执行程序

gcc main.c miracl.a -o main
./main

方法二:

1、 将miracl.a放在系统对应的/usr/lib

cp /miracl/miracl.a /usr/lib/libmiracl.a

2、 在/usr/include下面建立文件夹miracl

mkdir /usr/include/miracl

3、 将miracl下的所有头文件拷贝到/usr/include/miracl

cp ./miracl/*.h /usr/include/miracl

4、 调用miracl时便可直接在自己的程序头文件中加入

#include <miracl/miracl.h>

使用方法一中的例子,即将main.c中的第一行改为include

5、 gcc编译并输出main执行程序

gcc main.c -lmiracl -o main
./main

linux64编译代码如下:

rm *.exe
rm miracl.a
cp mirdef.h64 mirdef.h
gcc -c -m64 -O2 mrcore.c
gcc -c -m64 -O2 mrarth0.c
gcc -c -m64 -O2 mrarth1.c
gcc -c -m64 -O2 mrarth2.c
gcc -c -m64 -O2 mralloc.c
gcc -c -m64 -O2 mrsmall.c
gcc -c -m64 -O2 mrio1.c
gcc -c -m64 -O2 mrio2.c
gcc -c -m64 -O2 mrgcd.c
gcc -c -m64 -O2 mrjack.c
gcc -c -m64 -O2 mrxgcd.c
gcc -c -m64 -O2 mrarth3.c
gcc -c -m64 -O2 mrbits.c
gcc -c -m64 -O2 mrrand.c
gcc -c -m64 -O2 mrprime.c
gcc -c -m64 -O2 mrcrt.c
gcc -c -m64 -O2 mrscrt.c
gcc -c -m64 -O2 mrmonty.c
gcc -c -m64 -O2 mrpower.c
gcc -c -m64 -O2 mrsroot.c
gcc -c -m64 -O2 mrcurve.c
gcc -c -m64 -O2 mrfast.c
gcc -c -m64 -O2 mrshs.c
gcc -c -m64 -O2 mrshs256.c
gcc -c -m64 -O2 mrshs512.c
gcc -c -m64 -O2 mrsha3.c
gcc -c -m64 -O2 mrfpe.c
gcc -c -m64 -O2 mraes.c
gcc -c -m64 -O2 mrgcm.c
gcc -c -m64 -O2 mrlucas.c
gcc -c -m64 -O2 mrzzn2.c
gcc -c -m64 -O2 mrzzn2b.c
gcc -c -m64 -O2 mrzzn3.c
gcc -c -m64 -O2 mrzzn4.c
gcc -c -m64 -O2 mrecn2.c
gcc -c -m64 -O2 mrstrong.c
gcc -c -m64 -O2 mrbrick.c
gcc -c -m64 -O2 mrebrick.c
gcc -c -m64 -O2 mrec2m.c
gcc -c -m64 -O2 mrgf2m.c
gcc -c -m64 -O2 mrflash.c
gcc -c -m64 -O2 mrfrnd.c
gcc -c -m64 -O2 mrdouble.c
gcc -c -m64 -O2 mrround.c
gcc -c -m64 -O2 mrbuild.c
gcc -c -m64 -O2 mrflsh1.c
gcc -c -m64 -O2 mrpi.c
gcc -c -m64 -O2 mrflsh2.c
gcc -c -m64 -O2 mrflsh3.c
gcc -c -m64 -O2 mrflsh4.c
cp mrmuldv.g64 mrmuldv.c
gcc -c -m64 -O2 mrmuldv.c
ar rc miracl.a mrcore.o mrarth0.o mrarth1.o mrarth2.o mralloc.o mrsmall.o mrzzn2.o mrzzn3.o
ar r miracl.a mrio1.o mrio2.o mrjack.o mrgcd.o mrxgcd.o mrarth3.o mrbits.o mrecn2.o mrzzn4.o
ar r miracl.a mrrand.o mrprime.o mrcrt.o mrscrt.o mrmonty.o mrcurve.o mrsroot.o mrzzn2b.o
ar r miracl.a mrpower.o mrfast.o mrshs.o mrshs256.o mraes.o mrlucas.o mrstrong.o mrgcm.o
ar r miracl.a mrflash.o mrfrnd.o mrdouble.o mrround.o mrbuild.o
ar r miracl.a mrflsh1.o mrpi.o mrflsh2.o mrflsh3.o mrflsh4.o
ar r miracl.a mrbrick.o mrebrick.o mrec2m.o mrgf2m.o mrmuldv.o mrshs512.o mrsha3.o mrfpe.o
rm mr*.o
gcc -m64 -O2 bmark.c miracl.a -o bmark
gcc -m64 -O2 fact.c miracl.a -o fact
g++ -c -m64 -O2 big.cpp
g++ -c -m64 -O2 zzn.cpp
g++ -c -m64 -O2 ecn.cpp
g++ -c -m64 -O2 ec2.cpp
g++ -c -m64 -O2 crt.cpp
g++ -m64 -O2 mersenne.cpp big.o miracl.a -o mersenne
g++ -m64 -O2 brent.cpp big.o zzn.o miracl.a -o brent
g++ -c -m64 -O2 flash.cpp
g++ -m64 -O2 sample.cpp flash.o miracl.a -o sample
g++ -m64 -O2 ecsgen.cpp ecn.o big.o miracl.a -o ecsgen
g++ -m64 -O2 ecsign.cpp ecn.o big.o miracl.a -o ecsign
g++ -m64 -O2 ecsver.cpp ecn.o big.o miracl.a -o ecsver
g++ -m64 -O2 pk-demo.cpp ecn.o big.o miracl.a -o pk-demo
g++ -c -m64 -O2 polymod.cpp
g++ -c -m64 -O2 poly.cpp
g++ -m64 -O2 schoof.cpp polymod.o poly.o ecn.o crt.o zzn.o big.o miracl.a -o schoof
 

Linux下编译并使用miracl密码库的更多相关文章

  1. 树莓派下编译并使用miracl密码库

    参考:Linux下编译并使用miracl密码库 MIRACL用户手册:https://wenku.baidu.com/view/d542f2ed0975f46527d3e1dc.html 具体过程. ...

  2. linux下编译qt5.6.0静态库——configure配置

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  3. linux下编译qt5.6.0静态库——configure配置(超详细,有每一个模块的说明)(乌合之众)

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  4. linux下编译qt5.6.0静态库(使用./configure --help来看看都有哪些参数。超详细,有每一个模块的说明。如果改变了安装的目录,需要到安装目录下的bin目录下创建文件qt.conf)(乌合之众)good

    linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberr ...

  5. 嵌入式 Linux下编译并使用curl静态库

    #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...

  6. [转][linux][centos]嵌入式 Linux下编译并使用curl静态库

    #x86 ./configure --disable-shared --enable-static --disable-ftp --disable-ipv6 --disable-rtsp --disa ...

  7. linux下编译时,链接math库

    在gcc下用到数学函数,如sqrt.在gcc时要加上 -lm 参数,这样告诉编译器我要用到数学函数了 . 如:gcc a.c -o a -lm 当在用Eclipse编译使用数学函数的C语言程序时,如s ...

  8. linux下编译ffmpeg 引入外部库x264

    Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure ...

  9. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

随机推荐

  1. 怎么编写API和或者自己不属于知识小案例demo程序

    再使用一个函数,进行测试的调用,然后进行调用这样就不需要再为makefile什么,还有就是改什么鬼东西烦恼了. 然后把需要的功能进行分解就行了.

  2. 边捆绑: Content Importance Based Edge Bundling for Graph Visualization

    Problem 当图所要表达的信息较多时, 图中可能会充满交叉的线[1-2], 甚至整个显示空间都被点.线所覆盖, 这时想通过观察来获取图中的重要信息将会变得非常困难, 这种现象称为图的视觉混乱. K ...

  3. java基础异常处理

    异常的定义:中断了正常指令流的事件. try..catch..finally结构: class Test{ public static void main(String[] args){ System ...

  4. thinkphp 二级域名绑定模块,导致设置的路由被多域名共用的问题解决方案

    问题背景: 在router.php路由配置文件设置了二级域名和路由设置 use think\Route; Route::domain('www','index'); Route::domain('ad ...

  5. Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取

    准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ...

  6. OpenCV的视频输入和相似度测量

    #include <iostream> #include <string> #include <iomanip> // 控制浮动类型的打印精度 #include & ...

  7. 第三十六篇 入门机器学习——Jupyter Notebook中的魔法命令

        No.1.魔法命令的基本形式是:%命令   No.2.运行脚本文件的命令:%run %run 脚本文件的地址 %run C:\Users\Jie\Desktop\hello.py # 脚本一旦 ...

  8. ASP.NET + MVC5 入门完整教程八 -—-- 一个完整的应用程序(上)

    https://blog.csdn.net/qq_21419015/article/details/80509513 SportsStore 1.开始创建Visual Studio 解决方案和项目这里 ...

  9. 怎么把VS里的scanf_s换成scanf

    转自:https://blog.csdn.net/hansionz/article/details/79889039 方法一:在项目属性中---->配置属性------>C\C++---- ...

  10. DSP---TI CCSv5.5.x-Windows安装

    TI CCSv5.5.x(正式版)-Windows版本 国内2013年9月13日首发安装CCSv5.5图示 *请关掉防火墙及杀毒软件进行安装 第一步 第二步 安装程序检测到挂起的重新启动,这可能在安装 ...