一、简介

密码学学习、研究人员往往着重于理论研究,难以与实践直接挂钩,今天介绍一下国外著名密码学C语言函数库——Miracl库的使用方法。

Miracl库的官方网站是http://www.shamus.ie/,完全开源,任何人可以去免费下载使用。由于国外网速有限,本站提供下载地址:http://www.mathmagic.cn/bbs/read.php?boardID=16&tid=5153(版本略旧,但不会影响使用,我一直用这个版本)。

该库针对公钥密码学和椭圆曲线密码学的实现,写了很多函数,在这方面可以说是所有国外的库中功能最强大的了。但分组密码等方面的函数相对较少。

二、VC6中调用Miracl库的方法

一般我们采用VC 6.0来使用Miracl库,本站提供VC6的下载地址:http://www.mathmagic.cn/bbs/read.php?boardID=18&tid=5772。

下面我详细讲述一下使用方法。

1、VC中新建一个project,选择“win32 console application”,起名为123,建立一个空的project。

2、找到该工程保存的文件夹,把miracl\lib\ms32.lib,miracl\include\mirdef.h,miracl\include\miracl.h三个文件拷贝到123文件夹下。

3、在VC中左边的“workspace”列表中,选“fileview”选项卡,对着123 files单击右键,add files t o project,将ms32.lib加进来(注意:看不到ms32.lib的,把“文件类型”设置为“所有类型”)。

4、右键单击Source Files,添加文件,命名为123.c,写入下列程序:


#include "miracl.h"
main()
{
big a, b, c;
miracl *mip = mirsys(5000, 16);
a=mirvar(8);
b=mirvar(7);
c=mirvar(0);
add(a, b, c);
cotnum(c, stdout);
}

注1:“miracl *mip = mirsys(5000, 16);”该行程序是每个含有miracl语句的程序都必须有的语句,必须放在变量声明后面、其他程序前面。意思是我定义的这些变量最大长度都是5000位(这个位是后面进制的位数),输入、输出、运算用的进制都是16进制。

注2:每个big型变量都必须赋初始值,否则出错!

注3:有可能会出现警告:LINK : warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library。当它不存在好了,没事。

注4:输入函数有cinnum和innum,输出函数有cotnum和otnum,用的时候尽量用前者,我用后者老是出错,文档里有说明,我暂时没时间仔细研究为什么出错。据说跟进制有关,高手可以跟帖解释一下。

注5:使用cinnum函数之前加上“mip->IOBASE = 16;”,见我下面的例子。否则出错。

5、运行即可输出“F”。绝对不会出错。如果程序运行有错误的,返回上面第一步,仔细看看自己哪个地方弄错了。

至此,你已经学会了如何在VC中调用用miracl库的函数了。具体每个函数怎么用,你可以看看文档(MIRACL Reference Manual),写的非常清楚。在文档中可以查到某个函数的源代码在哪个文件里,找到该文件后,进去找找,每个函数的前面都有说明,说明该函数中的算法出自哪里。对于研究算法和实现的人也是很有帮助的。

三、学习与提高

Miracl提供两个说明文档,一个是函数查询手册(MIRACL Reference Manual),另一个是使用说明(User’s Manual)。

你也可以把文档User’s Manual中的程序拿过来用用试试。逐渐熟悉一下一些常见的函数的使用方法。

下面是我自己写的一个实现1024比特RSA解密的时间测试程序:


#include "miracl.h"
#include <time.h>
main()
{
int i;
big x, e, m, y;
FILE *fp;
clock_t tBegin, tEnd;
miracl *mip = mirsys(1000, 16);
x = mirvar(0);
e = mirvar(0);
m = mirvar(0);
y = mirvar(0);
fp = fopen("data.txt", "r+");
mip->IOBASE = 16;
cinnum(x, fp);
cinnum(e, fp);
cinnum(m, fp);
fclose(fp);
tBegin = clock();
for (i = 0; i < 100; i ++)
powmod(x, e, m, y);
tEnd = clock();
cotnum(x, stdout);
cotnum(e, stdout);
cotnum(m, stdout);
cotnum(y, stdout);
printf("\n\n进行100次1024比特的模指数运算所消耗的时间为:%ld ms\n\n", tEnd - tBegin);
}

运行该程序时候,还需要在文件夹中建立一个data.txt文件,用于存放数据:
F05085869EF4BA2514D08635E180E138DCD2AAAF1B04C69A4C3A9B612A6FAF9784393B5B49026FEA2F0E244D84506A7A1D44B8745CE4B9B0C83668FD83BADEFC2A6EEC3D80BA5A3CEB1CB538C25199B05E3E3535F3276020F53C8E9D2B518465BD2F6322C1751A00C6EF5186614D9EC955841B2CCFD59882853E4131233BC2E3
D98E5FC36267464CE6947FEEE0EC8BC7AA611AD15D68F234BAC62C18C9DEF38BA135550D54EBCD179EA40F377A01066B13E61FF8C9639B2D3A19EC7B8CC58877F7266FDDDC776C563D277DB0204C9CE7213D87E76750478531E3B09685629B1B9FEB06E118A5F3E978F8AED1D0C202A5728021831A5012D43DE53C9CAFFF4E1D
B5AEB6D01F4A09AE231CA573868A2B7F16E3F90AFA2417ADA94816CC8488D04F249132DB235A71BCD956D3E648F54FBA0A48F46626D113D3345E1415B727DAE37F0886DE3078FAD6FFBADC8DF22E4ADB88317A7E6BF7144306D06977EF54B061A87C236C4B4BF28006ED7D02F7F9C9BB87F7EC3CF4F623A183A7EB0B95654073

(三个数据用回车隔开,最后一行后面必须有回车!)

运行可知:用Miracl库实现1024比特的RSA解密,平均一次只需要14毫秒,以前很多人都不知道这个数据吧?嘿嘿,实践出真知啊。(我的运行环境是P4 3.0,1G内存)。

四、尾声

国外著名密码学函数库还有:GMP、NTL、Crypto++、LibTomCrypt(LibTomMath)、OpenSSL等,本站密码算法快速实现版块有一些简介(http://www.mathmagic.cn/bbs/index.asp?boardid=25)。欢迎对密码算法快速实现有兴趣的各位有志之士前来讨论。

转载自 http://www.mathmagic.cn/bbs/simple/?t7050.html

密码学C语言函数库——Miracl库快速上手中文指南(VC)相关推荐

  1. c语言添加miracl库,密码学C语言函数库——Miracl库快速上手中文指南(VC)

    一.简介 密码学学习.研究人员往往着重于理论研究,难以与实践直接挂钩,今天介绍一下国外著名密码学C语言函数库--Miracl库的使用方法. 该库针对公钥密码学和椭圆曲线密码学的实现,写了很多函数,在这 ...

  2. mac快速上手使用指南

    mac快速上手使用指南 文章目录 mac快速上手使用指南 1.名词解释 2.常用快捷键 2.1 文字编辑相关 2.2 文件操作相关 2.3 其他重要的 3.常用手势 4.常见操作 1.名词解释 访达: ...

  3. Excel之VLOOKUP函数(零基础快速上手)

    目录 VLOOKUP介绍 VLOOKUP快速上手 需求描述 需求实现 常见问题 问题一: 问题二: 问题三: VLOOKUP介绍 VLOOKUP函数是Excel中的一个纵向查找函数,在工作中都有广泛应 ...

  4. 使用 Docker 来快速上手中文 Stable Diffusion 模型:太乙

    本篇文章,我们聊聊如何使用 Docker 快速运行中文 Stable Diffusion 模型:太乙. 写在前面 上个月的时候,有朋友和我推荐了一个 "Stable Diffusion&qu ...

  5. swig封装 c语言函数到python库,python swig 调用C/C++接口

    转载:https://www.cnblogs.com/dda9/p/8612068.html 当你觉得python慢的时候,当你的c/c++代码难以用在python上的时候,你可能会注意这篇文章.sw ...

  6. C语言函数实现ascii码快速查询

    在C语言中为了方便快捷地实现ascii码的查询,我们可以利用函数的声明和定义来实现 新建一个项目 头文件: #pragma onceint ascii(char n); 源文件:因为要使用printf ...

  7. csv库的作用、怎么用、以及csv库的操作快速上手

    一.csv库的作用(是做什么的)? 答:是操作表格数据的库:是操作(用","分割字段形成)纯文本文件的数据库.通俗理解就是读写文件的库. 二.怎么用? 调用csv库四个主要的类 w ...

  8. Babel快速上手使用指南

    在刚开始使用babel的时候,相信很多同学应该和我一样,对于babel的使用配置一知半解,babel相关的包@babel/core,@babel/cli,babel-loader,@babel/pol ...

  9. 力创eda 画布大小_立创EDA快速上手经验指南

    目录 : ~9 `  u+ Q" {2 ?, o 一:浏览器设置. 3 v8 Y: }, I) f+ Q 二:界面使用 6 }6 I4 V; n& _/ J! E9 A三:常用快速操 ...

最新文章

  1. windows无法配置此无线连接_Kubernetes 1.18功能详解:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...
  2. 2、求100以内的素数之和。(20分)
  3. 架设自己的WebDAV服务器作为AutoCAD WS的数据存储
  4. nsdictionary获取值_获得nsdictionary值
  5. 【转载】程序员历史之一
  6. 2014.10.1 Form中显示pdf文件
  7. Anaconda基础命令总结
  8. 谈谈流计算中的『Exactly Once』特性
  9. 《JS权威指南学习总结--3.4null和undefined》
  10. ubuntu 18.04安装搜狗输入法
  11. 数电实验(二)利用8选1数据选择器74LS151设计四舍五入判别电路
  12. 关于LinkList和LNode*
  13. 赶上时代步伐,我们也来做“菱形图片”
  14. 设置行与行的间隔(行间距)
  15. 码距与检错错位数、纠错位数的关系
  16. Floyd算法、Dijkstra算法例题
  17. 我对光学相干层析成像的理解
  18. 2-04-调用函数-0518
  19. 陶伟死因 从微博看明星
  20. Zabbix探索:关于网络设备SysUpTime监控的问题

热门文章

  1. Qt Quick 示例 - StocQt股票趋势图开发
  2. css鼠标事件(状态)
  3. 华为CE12808更换主控板
  4. RGB、YUV、HSV和HSL区别和关联
  5. Thymeleaf总结
  6. Leo答i,Claud“三问《程序员职场第一课》”
  7. 算术编码(Arithmetic coding)
  8. 麦克纳姆轮小车在gazebo中的实现
  9. vpp的网卡直通配置和SRIOV配置方法
  10. 计算机基础知识用语,电脑基础知识之常见术语