OpenSSL密码库算法笔记——第0.2.2章 大整数赋值

本文详细介绍了大整数的各种操作,包括复制、设置特殊值如1和0、以及符号的修改。通过具体函数如BN_copy、BN_set_word、BN_one、BN_zero和BN_set_negative的解析,帮助读者深入理解大整数在加密算法中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在新建了一个大整数以后,就可以开始设置这个大整数了。比如给这个大整数赋值——有可能是复制前面已有的某个大整数的所有相关数据,也有可能是将大整数设置为一些特殊的数,比如1、0等,当然你也可以自己输入相关数据。

将一个大整数的相关数据复制给另外一个大整数可以使用BN_copy:

───────────────────────────────────────

BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)

功能:    大整数复制。

输入:    b

输出:    a ← b

返回:    a

出处:    bn_lib.c

───────────────────────────────────────

另外一种将经常出现的情况就是将大整数设置为一些特殊的数。首先来看看将大整数设置成一个小数——字。

───────────────────────────────────────

int BN_set_word(BIGNUM *a, BN_ULONG w)

功能:    将字赋给大整数

输入:    w

输出:    a ← w

返回:    1【正常】or 0【出错】

出处:    bn_lib.c

───────────────────────────────────────

很多时候会将大整数设置为更特殊的数——1或者0,因此就有必要编写两个专门的函数(宏定义)来实现这些功能。下面这个宏定义是将大整数置为1。

───────────────────────────────────────

#define BN_one(BIGNUM *a)

功能:    将大整数置为1

输入:    -

输出:    a ← 1

返回:    1【正常】or 0【出错】

出处:    bn.h

备注:    宏定义。#define BN_one(a) (BN_set_word((a),1))。

───────────────────────────────────────

下面将要介绍的BN_value_one与BN_one的作用类似,它们的区别是:你可以将BN_value_one()当成大数1来直接使用,而不需要象BN_one那样事先声明一个大数。举个例子,BN_copy(&b, BN_value_one())就等价于BN_one(&b)。

───────────────────────────────────────

const BIGNUM *BN_value_one(void)

功能:    给出一个大数1

输入:    -

输出:    -

返回:    大数1

出处:    bn_lib.c

───────────────────────────────────────

接下来看看将大整数设置为0的宏定义。

───────────────────────────────────────

#define BN_zero(BIGNUM * a)

功能:    将大整数赋值为零。

输入:    -

输出:    a ← 0

返回:    1【正常】or 0【出错】

出处:    bn.h

备注:    宏定义。#define BN_zero(a)       (BN_set_word((a),0)

───────────────────────────────────────

        定义的大整数都是带符号的,neg值为0时表示正数,neg值为1时表示负数。当需要修改大整数的符号时调用BN_set_negative。比如想将大整数b设置为-1,可先BN_one(&b),再BN_set_negative(&b, 1)。

───────────────────────────────────────

void BN_set_negative(BIGNUM *a, int b)

功能:    设置大整数符号

输入:    a,b【用来设置大整数的符号】

输出:    a【设置符号后的a】

返回:    -

出处:    bn_lib.c

备注:    在a≠0,b≠0时,将a置为负数。即不会出现设置出负零的情况。

───────────────────────────────────────

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值