【发布时间】:2013-08-10 00:53:32
【问题描述】:
我有一个 C 语言的客户端服务器程序,它使用 mcrypt 库加密/解密数据。客户端加密想要发送到服务器的字符串,发送它,服务器读取后,解密它。下面是我的加密和解密功能:
加密功能:
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,这里也有更详细的问题,指出了包含bug的代码。
【问题讨论】:
-
您确定收到所有数据吗?您使用什么类型的客户端/服务器架构?互联网插座?
-
@robin.koch 是的。套接字到套接字通信。不管怎样,我验证了看服务器读取的字符串是否与客户端写入的字符串相同,从这个角度来看,一切都很好。