Openssl加密、解密不适用于DES

Openssl加密、解密不适用于DES,openssl,des,Openssl,Des,我正在开发一个简单的应用程序,其中有一个客户端C和一个服务器S 客户端从std输入中获取文本,对其进行加密,并将其发送到服务器 因为,我不知道来自用户的文本是否是我使用des的8字节的倍数, 在我的加密函数中,我始终调用: EVP_加密更新 然后: 执行副总裁 int encrypt(EVP_CIPHER_CTX *x, char * in, char * buf_out ) { int text_len; int loutU; int loutF; tex

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

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

因为,我不知道来自用户的文本是否是我使用des的8字节的倍数, 在我的加密函数中,我始终调用: EVP_加密更新

然后: 执行副总裁

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 0x08 0x08 0x08您好

0x08 8倍是客户端EVP_EncryptFinal_ex上添加的填充

另一个例子: 如果第一条消息是prova daje。 你好,我是第二个。 服务器将作为第二条消息打印: je 0x05 0x05 0x05 0x05 0x05 0x05 0x05你好 请注意,5次的je和0x05是第一条消息的一部分,事实上: prova da是8个字节,je'\0'是3个字节,因此0x05是填充

我怎样才能避免这种情况? 我希望第一条消息和第二条消息之间没有依赖关系

我每次都要叫清洁吗

编辑: 我解决了,因为我调用了EVP_EncryptFinal_ex,所以我必须调用EVP_init才能重用 上下文