You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译加密算法库后无法切换密钥长度的技术问题咨询

编译加密库后无法切换密钥长度的问题

我写了一款支持CIPHER_128、CIPHER_256、CIPHER_384三种密钥长度的加密算法,但遇到了核心问题:将算法编译为库文件后,无法再切换密钥长度——编译库时定义的密钥长度会成为唯一可用选项,后续使用库时即使修改头文件的宏定义也完全无效。

现有代码实现

cipher.h

#define CIPHER_128
#define CIPHER_256
#define CIPHER_384

#if defined(CIPHER_384)
#define CIPHER_KEYLEN 48
#elif defined(CIPHER_256)
#define CIPHER_KEYLEN 32
#else
#define CIPHER_KEYLEN 16
#endif

cipher.c

#include "cipher.h"

#if defined(CIPHER_384)
// 对应384位密钥的加密逻辑代码
#elif defined(CIPHER_256)
// 对应256位密钥的加密逻辑代码
#else
// 对应128位密钥的加密逻辑代码
#endif

编译库时的cipher.h内容

#define CIPHER_128
// #define CIPHER_256
// #define CIPHER_384

举个例子,用上面的配置编译出库后,后续使用时即使取消CIPHER_256或CIPHER_384的注释,也没法启用这两种密钥长度,只能用编译时指定的128位版本。

尝试过的无效方法

我曾尝试把宏定义改成带值的形式,再做条件判断,但依然解决不了问题:

#define CIPHER_256 1
// ...

#if defined(CIPHER_256) && (CIPHER_256 == 1)
// ...
#endif

可行方案探讨

我想到可以在加密算法的数据类型结构体中添加keylen成员,让用户在每次加解密操作时手动指定密钥长度,但不确定这个方案是否是最优解,有没有更简洁的处理方式。

我的编译指令

gcc -c cipher.c
ar cr libcipher.dll cipher.o

gcc src/test.c -I includes/cipher -L. -lcipher -o test

内容的提问来源于stack exchange,提问作者S-N

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:52:14