そのため、暗号を格納している char 配列の末尾に暗号テキストの長さを追加しようとしています。
...
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 に書き換える必要があるため、この暗号の長さを何らかの形で暗号に格納する必要があります。また、これを再設計する余地もありません。