因此,我希望将密文的长度附加到存储密码的 char 数组的末尾。我不是 C 语言的本地人,下面是我设计的我认为可行的测试片段。
...
int cipherTextLength = 0;
unsigned char *cipherText = NULL;
...
EVP_EncryptFinal_ex(&encryptCtx, cipherText + cipherTextLength, &finalBlockLength);
cipherTextLength += finalBlockLength;
EVP_CIPHER_CTX_cleanup(&encryptCtx);
// Append the length of the cipher text onto the end of the cipher text
// Note, the length stored will never be anywhere near 4294967295
char cipherLengthChar[1];
sprintf(cipherLengthChar, "%d", cipherTextLength);
strcat(cipherText, cipherLengthChar);
printf("ENC - cipherTextLength: %d\n", cipherTextLength);
...
问题是我认为strcat
在处理二进制数据时使用不会有问题。谁能提出一个更好的方法来做到这一点?
谢谢!
编辑
好的,所以我将添加一些背景信息来说明我为什么要附加长度。在我encrypt
的函数中,该函数需要被加密EVP_EncryptUpdate
的长度。plainText
因为这更容易获得,所以这部分不是问题。然而,类似地,EVP_DecryptFinal_ex
在我的decrypt
函数中使用需要被解密的长度ciperText
,所以我需要将它存储在某个地方。
在我实现这一点的应用程序中,我所做的只是将一些糟糕的哈希更改为正确的加密。为了增加麻烦,应用程序的方式是我首先需要解密从 XML 读取的信息,对其进行处理,然后对其进行加密并再次将其重写为 XML,因此我需要以某种方式将此密码长度存储在密码中。我也没有空间重新设计这个。