C/C++大数库简介
在网络安全技术领域中各种加密解密算法的软件实现上始终有一个共同的问题就是如何在普通的PC机上实现大数的运算。我们日常生活中所应用的PC机内部字长多是32位或64位,但是在各种加密解密的算法中为了达到一定的安全强度,都是要求在128位、512位或者是1024位这样的字长下进行加减乘除模逆等各种数学运算,我们称为大数运算。在这样的前提下,如何在PC机上快速高效的实现大数运算就很自然的成为了在PC机上实现加密解密算法最为基础和重要的问题。像Python、Lisp等语言都内建了大数计算机制,但是像C/C++语言既没有内建大数运算机制也没有对应的标准库实现。
为了解决C/C++大数运算的问题,许多优秀的大数运算库随之出现。下面对几种优秀的大数库进行简单的介绍:
GMP:GMP大数库是GNU项目的一部分,诞生于1991年。作为一个任意精度的大整数运算库,它包括了任意精度的整数、浮点数的各种基本运算操作。它是一个C语言的库,但是官方提供了C++的包装类,主要的应用方向是密码学、网络安全、代数系统、计算科学等。GMP库的运行速度非常快,它的官方网站上称自己为地球上最快的大数库,但是GMP库所提供的只是数学运算功能,并没有密码学相关的高级功能。(注:GMP安装如果出现了问题,可能是安装包所在目录太深了,试着换个目录重新安装下)
Miracl:Miracl库是Shamus
Software Ltd开发的一个大数库,它的使用许可针对教育科学研究或者非商业目的的应用是免费的。它是一个C语言的库,同时提供了几个较为简单的c++包装类。在功能上它不但提供了高精度的大整数和分数的各种数学运算操作而且提供了很多密码学算法中的功能模块,如SHA、AES、DSA等中的一些底层操作。最为特别的是它还提供了很多椭圆曲线密码体制中的底层功能模块。由于Miracl库的内部实现采用了很多的汇编代码,故运行速度也非常快。
Crypto++:Crypto++库是一个开源项目。由于它是一个纯C++实现的库,所以应用非常的方便,库的结构清晰,文档也很健全。Crypto++库提供了很多密码学算法的实现。
OpenSSL:OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric
Yang等发起编写的。它可以实现消息摘要、文件的加密和解密、数字证书、数字签名和随机数字等。它的主要用途并不是大数库,而是SSL协议的实现和应用,但是其中也有一些关于大整数的功能,此外它也是基于C语言。
下面是一些常用的大数运算库的地址(有些虽然不是专门的大数运算库,但是带有相关的库)
Crypto++:http://www.eskimo.com/~weidai/cryptlib.html
MIRACL:https://github.com/CertiVox/MIRACL
GNU MP:http://www.swox.com/gmp/
Piologie:
http://www.hipilib.de/pidownload.htm
cryptlib:http://www.cs.auckland.ac.nz/~pgut001/cryptlib/
RSAEuro:http://www.rsaeuro.com/products/RSAEuro/
OpenSSL:http://www.openssl.org/
RSARef:http://download.gale.org/rsaref20.tar.Z
GInt:http://triade.studentenweb.org/GInt/gint.html(Delphi)
C/C++大数库简介的更多相关文章
- BerkeleyDB库简介
BerkeleyDB库简介 BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎: 嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和b ...
- LevelDB库简介
LevelDB库简介 一.LevelDB入门 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询 ...
- MXNet深度学习库简介
MXNet深度学习库简介 摘要: MXNet是一个深度学习库, 支持C++, Python, R, Scala, Julia, Matlab以及JavaScript等语言; 支持命令和符号编程; 可以 ...
- Python3.x:第三方库简介
Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...
- php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)
php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...
- 免费淘宝IP地址库简介及PHP/C#调用实例
https://yq.aliyun.com/ziliao/25800?spm=a2c4e.11155472.0.0.68027abfcpFb7O 摘要: 本文讲的是免费淘宝IP地址库简介及PHP/C# ...
- c++模板库(简介)
目 录 STL 简介 ......................................................................................... ...
- css公共库——简介中超过长度显示省略号
在简介.引言中常见:文字只有一排,超出宽度以省略号显示,像这样 实现方法:在公共库定义otw类 .otw{ overflow: hidden; text-overflow: ellipsis; whi ...
- java.util.stream 库简介
Java Stream简介 Java SE 8 中主要的新语言特性是拉姆达表达式.可以将拉姆达表达式想作一种匿名方法:像方法一样,拉姆达表达式具有带类型的参数.主体和返回类型.但真正的亮点不是拉姆达表 ...
随机推荐
- zookeeper系列之六—zookeeper之应用
http://www.cnblogs.com/sharpxiajun/archive/2013/06/02/3113923.html Zookeeper是hadoop的一个子项目,虽然源自hadoop ...
- C语言中的++和--
这个问题是老生常谈的问题了,虽然诸多大牛都深恶痛绝的告诉所有人不要那样写,但这永远挡不住学校的老师和考试. 今天我们来辨析一下这个东西. 首先我们来名词辨析一下吧: ++i 这个叫 前自增 i++ ...
- 修复跨站攻击 php
在公用文件中加入如下代码 <?php /*云体检通用漏洞防护补丁v1.1 更新时间:2013-05-25 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 */ $url_arr= ...
- SqlSever基础 有over函数时,用as为新列起名
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
网络原因无法下载virtual device,status 为0表示服务器没有响应.FQ下载吧,有VPN的小伙伴推荐这种. 或者直接手动下载ova虚拟机文件,然后将虚拟机文件导入到virtualbox ...
- EditPlus添加到右键菜单
1.Alt+R 键打开“运行” 2.“运行”中输入:regedit 打开注册表 (1.在 "我的电脑HKEY_CLASSES_ROOT*" 下新建项 shell: (2.在 ...
- Linux命令工具基础04 磁盘管理
Linux命令工具基础04 磁盘管理 日程磁盘管理中,我们最常用的有查看当前磁盘使用情况,查看当前目录所占大小,以及打包压缩与解压缩: 查看磁盘空间 查看磁盘空间利用大小 df -h -h: huma ...
- ubuntu1604安装体验
昨天安装了ubuntu 16 安装成了双系统,这样的速度才能接受. 各种软件支持的都还算不错.除了启动时候原始的气息,启动之后挺稳定的. 最让人开心的是新的unity的设置更加丰富了,可以自动隐藏,更 ...
- hdu 5950 Recursive sequence 矩阵快速幂
Recursive sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...