我在C中有一个客户端服务器程序,用mcrypt库加密/解密数据。客户端加密要发送到服务器的字符串,发送它,并在服务器读取后解密它。 Bellow是我的加密和解密功能:
加密功能:
void encrypt(char *es, char *key, char *civ, size_t length) {
MCRYPT td;
int n;
td = mcrypt_module_open(MCRYPT_TWOFISH, NULL, MCRYPT_CFB, NULL );
if (td == MCRYPT_FAILED) {
log_err(log_opts, strerror(errno));
exit(1);
}
n = mcrypt_enc_get_iv_size(td);
char iv[n + 1];
strncpy(iv, civ, n);
iv[n] = '\0';
if ((mcrypt_generic_init(td, key, KEY_SIZE, iv)) < 0) {
log_err(log_opts, "while trying to do mcrypt_generic_init.");
exit(1);
}
mcrypt_generic(td, es, length);
if (mcrypt_module_close(td) < 0) {
log_err(log_opts, "while trying to close module.");
exit(1);
}
}
解密功能
void decrypt(char *ds, char *key, char *civ, size_t length) {
MCRYPT td;
int n;
td = mcrypt_module_open(MCRYPT_TWOFISH, NULL, MCRYPT_CFB, NULL );
n = mcrypt_enc_get_iv_size(td);
char iv[n + 1];
strncpy(iv, civ, n);
iv[n + 1] = '\0';
if ((mcrypt_generic_init(td, key, KEY_SIZE, iv)) < 0) {
log_err(log_opts, "trying to do mcrypt_generic_init.");
exit(1);
}
mdecrypt_generic(td, ds, length);
if (mcrypt_module_close(td) < 0) {
log_err(log_opts, "while trying to close module.");
exit(1);
}
}
我的问题:
当在服务器端解密但在客户端加密的字符串与原始字符串不同时,存在(1到10速率)的情况。任何人都可以建议我的问题出在哪里?
修改
对这个问题的回答,你可以找到here,这个问题也在进一步详述,指出包含错误的代码。
答案 0 :(得分:1)
在decrypt
函数中:
char iv[n + 1];
strncpy(iv, civ, n);
iv[n + 1] = '\0';
iv[n + 1] = '\0';
声明中有一个逐个溢出。
答案 1 :(得分:0)
问题是我在原始字节数组上使用了字符串函数。查看this链接了解更多详情。