그래서 암호를 저장하고있는 char 배열의 끝 부분에 암호 텍스트의 길이를 추가하려고합니다. C와는 네이티브가 아닙니다. 내가 생각한 것의 시험 발췌 문장은 은라고 생각합니다.Int를 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
길이가 필요합니다. 이 방법이 훨씬 쉽기 때문에이 부분은 문제가되지 않습니다. 그러나 마찬가지로 decrypt
함수에 EVP_DecryptFinal_ex
을 사용하려면 ciperText
의 길이가 해독되어야하므로 어딘가에 저장해야합니다.
내가 이것을 구현하는 응용 프로그램에서 내가하고있는 일은 가난한 해싱을 적절한 암호화로 변경하는 것입니다. 추가 번거 로움을 추가하려면 애플리케이션에서 먼저 XML에서 읽은 정보를 해독 한 다음 그 내용을 암호화하고 XML로 다시 작성해야합니다. 따라서이 암호 길이를 어떻게 든 암호에 저장해야합니다. 나는 또한 이것을 재 설계 할 수있는 범위가 없다.
다른 의견을 읽은 후에 나는 길이를 앞에 붙이기로 결정했습니다. 나는 암호문을 시작할 위치를 알 수 있도록 버퍼를 상쇄하는 아이디어를 좋아한다. 이것에 대해 고마워! – MeanwhileInHell