openssl使用
BIGNUM(大数)
BIGNUM
是 OpenSSL 里用于存储大整数的结构体,远超普通的int
或long
,适合密码学中用到的大数运算。- 常用操作函数示例:
BN_new()
— 创建一个新的大数对象。BN_free()
— 释放大数对象。BN_hex2bn(BIGNUM **bn, const char *hex)
— 从十六进制字符串创建大数。BN_bn2hex(const BIGNUM *bn)
— 把大数转成十六进制字符串。BN_mod_inverse()
— 计算模逆。BN_mod_mul()
— 模乘。BN_mod_add()
— 模加。BN_rand_range()
— 生成范围内随机数。
BN_CTX
是大数计算时的临时变量池,避免频繁申请释放内存。
使用流程:
BN_CTX_new()
创建。BN_CTX_start()
开始申请临时变量。BN_CTX_get()
依次申请临时变量(BIGNUM指针)。- 计算结束后用
BN_CTX_end()
和BN_CTX_free()
清理。
EC_GROUP
- 代表一个椭圆曲线参数集合,例如素域p,系数a,b,基点G,阶n等。
EC_GROUP_new_curve_GFp(p, a, b, ctx)
— 根据参数创建一个椭圆曲线。EC_GROUP_set_generator(group, generator, order, cofactor)
— 设置曲线的生成元和阶。
EC_POINT
- 曲线上一个点,类似二维坐标 (x,y)。
EC_POINT_new(group)
— 创建一个点对象。EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)
— 设定点的坐标(注意这个函数从 OpenSSL 3.0 开始被标记为废弃)。EC_POINT_get_affine_coordinates_GFp(group, point, x, y, ctx)
— 获取点的坐标。EC_POINT_mul(group, R, k, Q, l, ctx)
— 计算R = k*G + l*Q
(点乘运算)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 infinite_blog!