11.openssl编程——大数

11.1 介绍
大数一般指的是位数很多的数。计算机表示的数的大小是有限的,精度也是有限的,精度也是有限的,它不能支持大数运算。密码学中采用了很多大数计算,为了让计算机实现大数运算,用户需要定义自己的大数表示方式及实现各种大数运算。Openssl为我们提供了这些功能,主要用于非对称算法。
 
11.2   openssl 大数表示
struct bignum_st
{
BN_ULONG *d;
int top; 用来指明大数占多少个BN_ULONG空间
int dmax;d数组的大小
int neg;是否为负数,如果为1,则是负数,为0,则为正数
int flags; 用于存放一些标记,比如flags含有BN_FLG_STATIC_DATA时,表明d的内存是静态分配的;含有BN_FLG_MALLOCED时,d的内存是动态分配的。
}
 
11.3 大数函数
大数函数一般都能根据函数名字知道起实现的功能
a.BN_rand/BN_pseudo_rand
功能:生成一个随机的大数
b.BN_rand_range/BN_pseudo_rand_range
功能:生成随机数,但是给出了随机数的范围。
c.BN_dup
功能:大数复制。
d.BN_generate_prime
功能:生成素数
e.int BN_add_word(BIGNUM *a, BN_ULONG w)
功能:给大数a加上w.
f.BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret)
功能:将内存中的数据转换为大数,为内存地址,len为数据长度,ret返回值
g.int BN_bn2bin(const BIGNUM *a, unsigned char *to)
功能:将大数转换为内存形式。输入参数为大数a,to为输出缓冲区地址,缓冲区需要预先分配,返回值为缓冲区的长度。
h.char *BN_bn2dec(const BIGNUM *a)
功能:将大数转换成正数字符串。返回值中存放正数字符串,它由内部分配空间,用户必须在外部用OPENSSL_free函数释放该空间。
i.BN_cmp
功能:比较两个大数
j.BIGNUM *BN_mod_inverse(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, BN_CTX *cttx)
功能:
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值