Openssl Encrypting,Decrypting不适用于DES

时间:2013-06-16 10:50:48

标签: openssl des

我正在开发一个简单的应用程序,其中有客户端(C)和服务器(S)。

客户端从std输入获取文本,对其进行加密,然后将其发送到服务器。

因为,我不知道来自用户的文本是否是8字节的倍数(我正在使用des), 在我的加密功能中,我总是打电话: EVP_EncryptUpdate

然后: EVP_EncryptFinal_ex

int encrypt(EVP_CIPHER_CTX *x, char * in, char * buf_out )
{

    int text_len;
    int loutU;
    int loutF;


    text_len = strlen(in) + 1; // i.e : adding '\0'

    if( EVP_EncryptUpdate(x, (unsigned char *)buf_out, &loutU, ( unsigned char*) in, text_len) == 0 )
        return -1;

    if( EVP_EncryptFinal_ex(x, (unsigned char *) &buf_out[loutU], &loutF) == 0 )
        return -1;  

    return loutU + loutF;
}

一切正常但仅适用于第一条消息。

例如,如果我发送第一条消息: “12345678”(即8字节),并作为第二条消息: “你好”。 我的服务器将打印为第二条消息: “0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08 Hello”。

0x08 8次是客户端EVP_EncryptFinal_ex添加的填充。

另一个例子: 如果第一条消息是“prova daje”。 而“你好”作为第二名。 服务器将打印为第二条消息: “je 0x05 0x05 0x05 0x05 0x05你好” 请注意,je和0x05为5次是第一条消息的一部分,的确如下: “prova da”是8个字节,“je'\ 0'”是3个字节,所以0x05是填充。

我该如何避免这种情况? 我希望第一条和第二条消息之间没有依赖关系。

我每次都必须致电clean_up吗?


编辑: 我解决了,因为我打电话给EVP_EncryptFinal_ex我必须调用EVP_init才能重用 背景。

0 个答案:

没有答案
相关问题