LibTomMath + vs2008,安装和测试程序

转载 2011年01月20日 13:17:00

上周想找一些关于加密算法实现的参考资料,在《BigNum Math - Implementing Cryptographic Multiple Precision Arithmetic》这本书里提到了用LibTomMath这么个东西,可以表示大整数以及进行密码学中的一些常用运算,于是下载来试了试。发现里面数据结构设计就相当不错,也包含了所有需要的运算,说明文档也还不错。

 

1. 生成静态库文件

无论是说明文档(bn.pdf)还是网络上的资料,都说到了需要生成静态库,然后在工程中加入这个静态库方可使用LibTomMath的高精度整数和运算。vs2008中创建LibTomMath静态库的步骤:

1) 下载LibTomMath的压缩包,解压;

2vs2008中新建项目->win32->静态库、取消预编译头;

3)工程中加入所有.c.h文件;

4)工具->选项->项目和解决方案->VC++目录->包含文件,加入LibTomMath源文件所在目录;

5)编译工程即可生成.lib文件。

bn.pdf里面还讲了linux下的使用方法,我就没有试过了。

 

2.使用静态库文件

把生成的.lib文件拷到其他工程目录下,项目->属性->配置属性->链接器->输入->附加依赖性,加入该.lib文件。还要在工程的代码中加入#include<tommath.h>,这样就可以用了。

 

3.LibTomMath的大整数数据结构mp_int

大整数的存储方式相当不错,通过整形字符串拼接表示。mp_digit就是unsigned longdpunsigned long类型的指针,其实更应该是数组,alloc为分配的空间,used为已使用的空间,sign为正负号。假设x= unsigned long最大值+1,一个mp_int类型变量所代表的数字大小为dp[used-1] + dp[used-2]*x^2 + …+ dp[1] *x^(used-2) + dp[0] *x^(used-1),注意big_endian  

 

 

1 typedef struct {
2     int used, alloc, sign;
3     mp_digit *dp;
4 } mp_int;

 

4.示例,RSA算法实现,具体某个函数的功能可以查看bn.pdf。里面有段求e的代码比较土,以后改进

01 #include<tommath.h>
02 #include<stdio.h>
03 #include<time.h>
04 int rsa_rng(unsigned char *dst, int len, void *dat)
05 {
06     int x;
07     for (x = 0; x < len; x++)
08         dst[x] = rand() & 0xFF;
09     return len;
10 }
11   
12 int main()
13 {
14     mp_int p,q,n,φ,e,t,d,m,c;
15     mp_init( &p );
16     mp_init( &q );
17     mp_init( &n );
18     mp_init( &φ );
19     mp_init( &e );
20     mp_init( &t );
21     mp_init( &d );
22     mp_init( &m );
23     mp_init( &c );
24   
25     //1.Choose two distinct prime numbers p and q (128bits)
26     srand((unsigned int)time(NULL));
27     mp_prime_random_ex( &p, 20, 128, LTM_PRIME_2MSB_ON|LTM_PRIME_SAFE, rsa_rng, NULL );
28     mp_prime_random_ex( &q, 20, 128, LTM_PRIME_2MSB_ON|LTM_PRIME_SAFE, rsa_rng, NULL );
29   
30   
31     //2.Compute n = pq
32     mp_mul( &p, &q, &n );
33   
34     //3.Compute φ(n) = (p − 1)(q − 1)
35     mp_sub_d( &p, 1, & p);
36     mp_sub_d( &q, 1, &q );
37     mp_mul( &p, &q, &φ );
38   
39     //4.Choose an integer e such that 1 < e < φ(n) and gcd(e,φ(n)) = 1
40     mp_set( &e, 127 );
41     retry_e:
42     mp_gcd( &e, &φ, &t );
43     if( ( mp_cmp_d(&t, 1) ) > 0 ){
44         mp_add_d( &e, 2, &e );
45         goto retry_e;
46     }
47     //5.Determine de ≡ 1 (mod φ(n))
48     mp_invmod( &e, &φ, &d );
49   
50     mp_clear( &p );
51     mp_clear( &q );
52   
53   
54     //明文
55     char str[100] = "AA7B0BF4AAE8B7C2ECC485ACFA5";
56     printf("明文:%s/n",str);
57   
58     //加密, 密文 c = m^e mod n
59     mp_read_radix( &m, str, 16 );
60     mp_exptmod( &m, &d, &n, &c );
61     mp_toradix( &c, str, 16 );
62     printf("密文:%s/n",str);
63   
64     //解密, 明文 m = c^d mod n
65     mp_exptmod( &c, &e, &n, &m );
66     mp_toradix( &m, str, 16 );
67     printf("解密:%s/n",str);
68   
69     return 0;
70 }

 

自来的网络参考资料:

http://hiliang.blog.hexun.com/57837642_d.html

http://www.cnblogs.com/linxr/archive/2010/11/10/1927003.html

 

原文:http://www.cnblogs.com/todsong/archive/2011/01/17/1937861.html

在VS2008下配置OpenCV1.0的方法(转)

1.下载安装OpenCV_1.02.按照默认选项安装OpenCV,在安装过程中,选择需要修改系统环境变量。3.打开电脑属性->高级->环境变量,在系统变量path里加上bin的路径(C:/Progra...
  • tulun
  • tulun
  • 2011年05月03日 22:34
  • 4228

VS2008配置OpenCV1.0

1.下载安装OpenCV_1.0; 2.按照默认(安装在C盘,可以省得配置,当然确认一下环境变量后还是要重启的)选项安装OpenCV,在安装过程中,选择需要修改系统环境变量; ...
  • qianmianyuan
  • qianmianyuan
  • 2013年05月05日 18:38
  • 980

解决office2007和vs2008安装冲突

      由于最近(you2 yu2 zui4 jin4)要用到VS2008,所以就把原来的VC6.0卸载了,可是安装VS2008时怎么也装不上去,网上看了一些说明,基本上就是关于office.zh...
  • huan_128
  • huan_128
  • 2010年12月27日 01:05
  • 865

VS2010和VS2008能否装在同一台电脑上(vs2008与vs2010共存)

本机上装的是 Visual Studio Team System 2008 想直接在此基础上装 Visual Studio 2010 旗舰版, 这样可以成功安装么? 或者安装完后在以后的使用中,...
  • zhou349398998
  • zhou349398998
  • 2014年02月26日 11:41
  • 2464

libtom简介

 基于Bit位运算的C语言库分析及其应用     1 LibTom工程的简要介绍   LibTom 项目包括开放来源公共领域软件由汤姆St. 丹尼斯用标准C语言写成,他的主页地址是...
  • dj0379
  • dj0379
  • 2016年07月13日 17:15
  • 722

VS2008串口测试程序

问题: 1.在做串口程序时,需要发送数据到单片机,而单片机也会不断发送到上位机,我在接收函数中,接收到数据后不断用UpdateDate(FALSE)更新数据,由于不断有数据上来,就会不停的调用Upd...
  • qq_19698877
  • qq_19698877
  • 2017年04月08日 18:11
  • 141

在windows7下安装vs2008失败的解决办法

如果安装了windows7,同时也安装了office2007,然后再安装vs2008时web创作组件会安装失败,解决办法如下:   教大伙一个比较简单的办法,不需要卸载重新安装office2007,也...
  • peihexian
  • peihexian
  • 2009年11月11日 09:17
  • 6642

VS2008安装Qt4.8

用MFC觉得就像是在刀尖上跳舞。听说
  • yuzhuqingyun
  • yuzhuqingyun
  • 2014年05月27日 17:24
  • 780

XP 安装VS2008

VS2008界面和VS2005差不多,很多功能命令也是很像的,所以没有感到新奇的地方,那为什么要用呢,因为手边只有VS2008光盘。 安装VS2008是一个漫长的过程,特别是最后安装数据库相关的组件...
  • ma52103231
  • ma52103231
  • 2012年07月23日 09:57
  • 1960

XP系统安装VS2008心得

XP系统下安装VS2008会出现诸多问题,本人通过亲历安装过程,将遇到的问题及解决方法记录下来,希望帮到大家。...
  • xinshi9608
  • xinshi9608
  • 2010年12月08日 15:41
  • 10875
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LibTomMath + vs2008,安装和测试程序
举报原因:
原因补充:

(最多只允许输入30个字)