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 = kG + lQ(点乘运算)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 InfinitePwn's Blog!