OpenSSL密码库算法笔记——第0.2.4章 比特操作与二进制展开

本文介绍大整数的比特操作函数,包括判断特定比特位是否为1和设置比特位为1的方法。同时,阐述了计算大整数二进制展开长度的原理与实现。

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

这里简单介绍两个比特操作函数——判断大整数的某一比特是否为零和设置大整数的某一比特为1

在模指数运算里面需要判断指数的某一位是不是1,这时候就需要:

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

int BN_is_bit_set(const BIGNUM *a, int n)

功能:    判断大整数第n比特是否为1

输入:    a,n

输出:    -

返回:    1【a的第n比特为1】 或者 0【a的第n比特为0,或者出现异常】

出处:    bn.h

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

        有时候需要将大整数的某一比特设置为1,比如想将值为0的大整数a设置为1024就只需要用BN_set_bit(&a, 10)。

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

int BN_set_bit(BIGNUM *a, int n)

功能:    设置大整数第n比特为1。

输入:    a,n

输出:    a 【设置比特后的a】

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

出处:    bn_lib.c

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

大整数的二进制展开在不少地方会涉及,而二进制展开长度就更为重要,比如模指数运算时。大整数是由字组成的,所以要知道大整数的二进制展开长度首先得弄清楚怎样计算一个字的二进制展开长度。

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

int BN_num_bits_word(BN_ULONG w)

功能:    计算字的二进制展开长度

输入:    w

输出:    -

返回:    字的二进制展开长度

出处:    bn_lib.c

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

        知道了字的二进制展开长度后,大整数的二进制展开长度也就知道了:

大整数的二进制展开长度 = 最高字的二进制展开长度 + (大整数的字长-1)×32。

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

int BN_num_bits(const BIGNUM *a)

功能:    计算大整数的二进制展开长度

输入:    a

输出:    -

返回:    大整数的二进制展开长度

出处:    bn_lib.c

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值