我在C脚本中使用Openssl时遇到问题,我必须对相同的字符串进行一定数量的循环加密,但是即使使用相同的iv和密钥,有时加密过程产生的加密输出与其他结果的其余部分,则发生的非常频繁,因为我需要将加密过程的结果(使用memcmp)与一组加密的字符串进行比较,如果结果不断发生,结果将不会保持一致。有人可以帮我弄清楚我的代码有什么问题吗?
这就是我所做的:
for(int i=0;i<20;i++){
string target = "xxx";
unsigned char* result;
unsigned char* unzero;
unzero = new unsigned char[100];
strcpy((char *) unzero, target.c_str());
int ciphertext_len;
result = new unsigned char[100];
// encryption process
ciphertext_len = encrypt (unzero, strlen ((char *)unzero), key, iv,result);
cout<<ciphertext<<<endl;
}
这是加密功能:
int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,
unsigned char *iv, unsigned char *ciphertext)
{
EVP_CIPHER_CTX *ctx;
int len;
int ciphertext_len;
if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
handleErrors();
if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
handleErrors();
ciphertext_len = len;
if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors();
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
return ciphertext_len;
}
这是输出:
\p`b�@J��A���i
\p`b�@J��A���iPK��U
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
\p`b�@J��A���i
请注意,第二行有所不同,是否有人可以帮助我?谢谢