使用C ++的OpenSSL AES加密会产生不同的输出问题

时间:2018-10-03 16:51:59

标签: c encryption openssl aes

我在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

请注意,第二行有所不同,是否有人可以帮助我?谢谢

0 个答案:

没有答案