编译加密算法库后无法切换密钥长度的技术问题咨询
编译加密库后无法切换密钥长度的问题
我写了一款支持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
相关产品推荐
相关产品推荐

