miracl使用手册

上传人:油条 文档编号:3574981 上传时间:2017-08-08 格式:DOC 页数:14 大小:153.50KB
返回 下载 相关 举报
miracl使用手册_第1页
第1页 / 共14页
miracl使用手册_第2页
第2页 / 共14页
miracl使用手册_第3页
第3页 / 共14页
miracl使用手册_第4页
第4页 / 共14页
miracl使用手册_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《miracl使用手册》由会员分享,可在线阅读,更多相关《miracl使用手册(14页珍藏版)》请在金锄头文库上搜索。

1、MIRACL 大数运算库使用手册游贵荣一MIRACL 简介MIRACL(Multiprecision Integer and Rational Arithmetic C/c+ Library)是一套由 Shamus Software Ltd.所开发的一套关于大数运算函数库,用来设计与大数运算相关的密码学之应用,包含RSA 公开密码学、Diffie-Hellman 密钥交换(Key Exchange)、AES、DSA 数字签名,还包含较新的椭圆曲线密码学(Elliptic Curve Cryptography)等等。运算速度快,并提供源代码。MIARCL 是当前使用比较广泛的基于公钥加密算法保护

2、实现的大数库之一,据说要使用该库用于商业软件,需要交纳一笔昂贵的授权费1000$。二MIRACL 常用函数调用手册声明:此处只列出和大数相关的简单运算函数,以及产生大数随机数的函数调用手册,具体请查看 manual.doc文档。不当之处,请大家批评指正!函数原型: void absol(big x, big y);功能说明: 取 x的绝对值,y=|x|函数原型: void add(big x, big y, big z);功能说明: 两个大数相加,z=x+yExample: add(x,x,x); / This doubles the value of x.函数原型: void bigbits

3、(int n, big x);功能说明: 产生一个 n位的大整数,初始化随机种子由 irand函数实现Example: bigbits(100,x); /This generates a 100 bit random number函数原型: int cinstr(big x, char *s);功能说明: 将大数字符串转换成大数返回值: 输入字符数的个数Example: mip-IOBASE=16; / input large hex number into big x cinstr(x,”AF12398065BFE4C96DB723A”);函数原型: int compare(big x, b

4、ig y);功能说明: 比较两个大数的大小返回值: xy 时返回+1, x=y 时返回 0, xIOBASE=10; /使用 10进制cotnum(x,stdout); /输出到屏幕This calculates and prints out the largest known prime number (on a true 32-bit computer with lots of memory!)函数原型: void expint(int b, int n, big x);功能说明: 计算 b的 n次方的大数函数原型: void fft_mult(big x, big y, big z);功

5、能说明: 使用 Fast Fourier算法计算两个大数乘积,z=x.y函数原型: unsigned int invers(unsigned int x, unsigned int y);功能说明:计算两个无符号整数(要求互素)的模逆,返回 x-1 mod y函数原型: BOOL isprime(big x);功能说明:判断一个大数是否为素数,使用概率测试算法返回值: x 为素数返回 TRUE,否则返回 FALSE函数原型: void powmod(big x, big y, big z, big w);功能说明: 模幂运算, w=xy mod z函数原型: void sftbit(big x

6、, int n, big z);功能说明:将一个大数左移或右移 n位,n 为正数时左移,负数时右移 函数原型: int xgcd(big x, big y, big xd, big yd, big z);功能说明: 计算两个大数的扩展最大公约数,也可以用来计算模逆,这个函数比 mad 函数运算速度稍慢。 z=gcd(x,y)=x.xd+y.ydExample: xgcd(x,p,x,x,x); /计算 x-1 mod p/* x = 1/x mod p (p is prime) */三MIRACL 函数库调用举例1.使用微软的 VS.NET 2003中文版(1)启动 Microsoft Vis

7、ual Studio .NET 2003,选择“文件”“新建”“项目”命令,如图 1-1所示;图 1-1 新建项目(2)打开“新建项目”对话框,选择“Win32 控制台项目”模板,在“名称”文本框中输入“TestMircal” ,如图 1-2所示,单击“确定”按钮;图 1-2 选择模板(3)单击“完成”按钮,完成新建项目;(4)将大数运算静态库文件 ms32.lib和头部文件 miracl.h和 mirdef.h拷贝到项目所在文件夹,本例中为“C:TempTestMiracl” ,如图 1-3所示;图 1-3 拷贝大数运算库所需文件(5)将大数运算静态库文件 ms32.lib文件添加到项目中,

8、操作方法是:右击“TestMircal”,选择快捷菜单中的“添加”“添加现有项”命令,如图 1-4所示;图 1-4 打开添加现有项对话框(6)打开“添加现有项-TestMircal”对话框,选择文件类型为“所有文件(*.*)” ,双击“ms32.lib”文件,将其添加到项目中,如图 1-5所示;图 1-5 添加 ms32.lib库文件(7)右击“TestMircal”,选择快捷菜单中的“添加”命令,打开“属性页”对话框,单击“C/C+”配置属性,选择“预编译头”选项,设置为“不使用编译头” ,如图1-6所示,单击“确定”按钮;图 1-6 不使用预编译头(7)为项目添加如下头文件的包含,此处使用

9、 extern C是表示用 C的方式编译,因为 ms32.lib是 C的库,不是 C+的库,如图 1-7所示;extern C#include miracl.h#include mirdef.h(8)在_tmain 函数中插入如下代码,以测试大数运算情况;miracl *mip = mirsys(400,10); /初始化一个400位10进制的大数系统big x,y,z;x = mirvar(177);y = mirvar(79);z = mirvar(0);divide(x, y, z); /x=x mod y, z=x/ycotnum(x,stdout); /x=19cotnum(y,st

10、dout); /y=79cotnum(z,stdout); /z=2multiply(x, y, z); /z=x*ymip-IOBASE=16; /将原来的10进制改为16进制模式cotnum(z, stdout); /5DD/* 测试13-1 mod 2436 = 937x = mirvar(13);y = mirvar(2436);xgcd(x, y, z, z, z);std:coutIOBASE=10; /将原来的16进制改为10进制模式expb2(500, p); /计算2的500次方, 21024 = 1.8 * 10308nxprime(p, p); /找一个比2的500次方大

11、的素数std:coutp=;cotnum(p, stdout);/还是测试一下是否为素数if ( isprime(p) ) std:coutp is a prime!n;premult(p, 2, q); /q=p*2nxprime(q, q); /找一个比p*2大的素数std:coutq=;cotnum(q, stdout);/还是测试一下是否为素数if ( isprime(q) ) std:coutq is a prime!n;multiply(p, q, n); /n = p*q /以下计算欧拉函数值pndecr(p, 1, p); /p = p - 1decr(q, 1, q); /q

12、 = q - 1multiply(p, q, pn);/pn = (p - 1)(q - 1)convert(65537, e); /取e公钥为2的16次方加1/cinstr(e,65537); /取e公钥为2的16次方加1xgcd(e, pn, d, d, d); /计算d = e-1 mod pnstd:coutd=;cotnum(d, stdout);bytes_to_big(8, mStr, m); /将8个字符的明文,转换成大数std:coutm=;cotnum(m, stdout);/加密powmod(m,e,n,c); /计算c=me mod nstd:coutc=;cotnum

13、(c, stdout);/解密powmod(c,d,n,m); /计算m=cd mod nstd:coutm=;cotnum(m, stdout);big_to_bytes(256,m,OutStr,FALSE); /将m转换成数组写入tempOutStr8 = 0;std:coutOutStr=OutStrn;mirkill(m); /释放大数变量mirkill(c);mirkill(p);mirkill(q);mirkill(d);mirkill(e);mirkill(n);mirkill(pn);mirexit();2.使用微软的 VC+V6.0 英文版使用 VC+V6.0和 VS.NET2003的区别主要在创建项目和项目属性设置有点不一样。关键就是要把 MS32.LIB静态库文件添加到 project中,还有就是 project的项目属性中的编译选项不要用“预编译头文件” 。详细情况请参见 msvisual.txt文档。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号