ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:19.59KB ,
资源ID:16691374      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16691374.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(MIRACL大数运算库使用手册Word格式文档下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

MIRACL大数运算库使用手册Word格式文档下载.docx

1、 int cinstr (big x, char *s); 将大数字符串转换成大数返回值 : 输入字符数的个数 mip-IOBASE=16; / input large hex number into big xcinstr(x, ”AF12398065BFE4C96DB723A”); int compare(big x, big y); 比较两个大数的大小 xy 时返回 +1, x=y 时返回 0, xy 时返回 -1 void convert (int n, big x); 将一个整数 n 转换成一个大数 x void copy (big x, big y); 将一个大数赋值给另一个大数,

2、 y=x int cotstr (big x, char *s); 将一个大数根据其进制转换成一个字符串 字符串长度 void decr (big x, int n, big z) ; 将一个大数减去一个整数, z=x-n. void divide (big x, big y, big z); 两个大数相除, z=x/y; x=x mod y ,当变量 y 和 z 相同时, x 为余数,商不返回(即 y 的值不变);当 x 和 z 相同时, x 为商,余数不返回。 divide(x,y,y);/x 为余数, y 值不变 BOOL divisible (big x, big y) 测试 x 能否

3、整除 y y 除 x 余数为 0,返回 TRUE,否则返回 FALSE int igcd(int x, int y) ; 返回两个整数的最大公约数 void incr (big x, int n, big z); 将一个大数加上一个整数, z=x+n incr(x,2,x); /* This increments x by 2. */ void mirkill (big x); 释放内存大数所占的内存 miracl * mirsys (int nd, int nb); 初始化 MIRACL系统,该函数必须在调用 MIRACL库函数之前先执行 miracl *mip=mirsys(500,10)

4、;/ 初始化 500 位的 10 进行制数 void mirexit (); 清除 MIRACL系统,释放所有内部变量 void multiply (big x, big y, big z); 两个大数相乘, z=x.y void negify (big x, big y); 大数取负号, y=-x. int numdig(big x); 返回大数 x 中数字的个数 void premult (big x, int n, big z); 一个大数乘以一个整数, z=n.x int subdiv (big x, int n, big z); 一个大数除以一个整数, z=x/n. 余数 BOOL

5、subdivisible (big x, int n) 测试 n 能否整除 x x 除以 n 余数为 0,返回 TRUE,否则返回 FALSE void bigdig (int n, int b, big x); 产生一个指定长度的进制的随机数,该函数使用内置的随机数发生器,初始化种子调用 irand 函数 bigdig(100,10,x); / 产生一个 100 位的 10 进制随机数 void bigrand (big w, big x); 使用内置的随机数发生器,产生一个小于 w 的大数随机数, xIOBASE=10;/ 使用 10 进制cotnum(x,stdout);/ 输出到屏幕T

6、hiscalculatesand printsout the largest known prime number (on a true 32-bitcomputer with lots of memory!)voidexpint (int b, int n, big x);计算 b 的 n 次方的大数 void fft_mult (big x, big y, big z); 使用 Fast Fourier 算法计算两个大数乘积, z=x.yunsigned intinvers (unsigned int x, unsigned int y);计算两个无符号整数(要求互素)的模逆,返回x-1

7、mod y BOOLisprime (big x); 判断一个大数是否为素数,使用概率测试算法 x 为素数返回 TRUE,否则返回 FALSE void powmod(big x, big y, big z, big w);y 模幂运算, w=x mod z void sftbit (big x, int n, big z); 将一个大数左移或右移 n 位, n 为正数时左移,负数时右移 int xgcd (big x, big y, big xd, big yd, big z); 计算两个大数的扩展最大公约数, 也可以用来计算模逆, 这个函数比 mad 函数运算速度稍慢。 z=gcd(x,y

8、)=x.xd+y.yd 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 Visual Studio .NET 2003,选择“文件”“新建”“项目”命令,如图 1-1 所示;图 1-1 新建项目(2)打开“新建项目”对话框,选择“ Win32 控制台项目”模板,在“名称”文本框中输入“ TestMircal ”,如图 1-2 所示,单击“确定”按钮;图 1-2 选择模板(3)单击“完成”按钮,完成新建项目

9、;( 4)将大数运算静态库文件 ms32.lib 和头部文件 miracl.h 和 mirdef.h 拷贝到项目所在文件夹,本例中为“ C:TempTestMiracl ”,如图 1-3 所示;图 1-3 拷贝大数运算库所需文件(5 )将大数运算静态库文件ms32.lib 文件添加到项目中,操作方法是:右击“ TestMircal ” , 选择快捷菜单中的“添加”“添加现有项”命令,如图 1-4 所示;图 1-4 打开添加现有项对话框( 6)打开“添加现有项 -TestMircal ”对话框,选择文件类型为“所有文件 (*.*) ”,双击“ ms32.lib ”文件,将其添加到项目中,如图 1

10、-5 所示;图 1-5添加 ms32.lib 库文件(7)右击“ TestMircal ”, 选择快捷菜单中的“添加”命令,打开“属性页”对话框,单击“ C/C+”配置属性,选择“预编译头”选项,设置为“不使用编译头” ,如图 1-6 所示,单击“确定”按钮;图 1-6 不使用预编译头( 7)为项目添加如下头文件的包含,此处使用 extern C 是表示用 C的方式编译,因为 ms32.lib 是 C 的库,不是 C+的库,如图 1-7 所示;extern #include miracl.hmirdef.h( 8)在 _tmain 函数中插入如下代码,以测试大数运算情况;miracl *mip

11、 = 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/y /x=19cotnum(y,stdout); /y=79cotnum(z,stdout); /z=2multiply(x, y, z); /z=x*y / 将原来的 10进制改为 16进制模式cotnum(z, stdout); /5DD/* 测试 13-1 mod 2436 = 937x = mirvar(13);y = mirvar(

12、2436);xgcd(x, y, z, z, z);std:coutz=;*/mirkill(x); / 释放大数变量mirkill(y);mirkill(z);/=/下面进行 RSA算法加密和解密运算charOutStr500;mStr=Computerbig m=mirvar(0);/m明文big c=mirvar(0);/c密文big p=mirvar(0);/大素数 pbig q=mirvar(0);大素数 qbig n=mirvar(0);/n模数big pn=mirvar(0);欧拉函数值 pn = (p - 1)(q - 1)big d=mirvar(0);/d私钥big e=m

13、irvar(0);/e公钥 / 将原来的 16进制改为 10进制模式expb2(500, p); / 计算 2的 500次方 , 21024 = 1.8 * 10308nxprime(p, p); / 找一个比 2的 500次方大的素数p=cotnum(p, stdout);/还是测试一下是否为素数if ( isprime(p) ) std:p is a prime!npremult(p, 2, q); /q=p*2nxprime(q, q); / 找一个比 p*2 大的素数q=cotnum(q, stdout);if ( isprime(q) ) std:q is a prime!multi

14、ply(p, q, n); /n = (p - 1)(q - 1)/以下计算欧拉函数值 pndecr(p, 1, p); /p = p - 1decr(q, 1, q); /q = 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 nd=cotnum(d, stdout);bytes_to_big(8, mStr, m); / 将

15、 8个字符的明文,转换成大数m=cotnum(m, stdout);/ 加密powmod(m,e,n,c); / 计算 c=me mod nc=cotnum(c, stdout);/解密powmod(c,d,n,m); / 计算 m=cd mod nbig_to_bytes(256,m,OutStr,FALSE); / 将 m转换成数组写入 tempOutStr8 = 0OutStr=OutStrmirkill(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 文档。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1