0

我有一个 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 率)。谁能建议我的问题可能来自哪里?


编辑

对这个问题的回答,你可以在这里找到,这里也进一步详细说明了这个问题,指出了包含错误的代码。

4

2 回答 2

1

decrypt功能上:

char iv[n + 1];
strncpy(iv, civ, n);
iv[n + 1] = '\0';

iv[n + 1] = '\0';您在语句中有一个非一的溢出。

于 2013-08-08T10:47:49.293 回答
0

问题是我在原始字节数组上使用了字符串函数。查看链接以获取更多详细信息。

于 2013-11-11T08:58:35.210 回答