Openssl加密、解密不适用于DES
我正在开发一个简单的应用程序,其中有一个客户端C和一个服务器S 客户端从std输入中获取文本,对其进行加密,并将其发送到服务器 因为,我不知道来自用户的文本是否是我使用des的8字节的倍数, 在我的加密函数中,我始终调用: EVP_加密更新 然后: 执行副总裁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
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才能重用
上下文