【问题标题】:OpenSSL: can input and output buffers be the same for encrypt/decrypt routines?OpenSSL:加密/解密例程的输入和输出缓冲区可以相同吗?
【发布时间】:2011-06-03 22:24:17
【问题描述】:

例如,在:

int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
                int *outl, unsigned char *in, int inl);

…可以out == in吗?

【问题讨论】:

  • 我猜没有,但你有试过吗?我很高兴知道。

标签: openssl


【解决方案1】:

我只是偶然发现了这个问题,因为我自己很好奇。由于没有人回答,我尝试了一下,它确实有效(至少使用 AES CTR 128 解密)所以我大胆猜测它也适用于其他类型。如果您有兴趣,这是我的代码示例。

/* Test Vector from http://www.inconteam.com/software-development/41-encryption/55-aes-test-vectors */

const unsigned char key[16] = { 0x2b, 0x7e, 0x15, 0x16,
                                0x28, 0xae, 0xd2, 0xa6,
                                0xab, 0xf7, 0x15, 0x88,
                                0x09, 0xcf, 0x4f, 0x3c };

const unsigned char IV[16] = { 0xf0, 0xf1, 0xf2, 0xf3,
                               0xf4, 0xf5, 0xf6, 0xf7,
                               0xf8, 0xf9, 0xfa, 0xfb,
                               0xfc, 0xfd, 0xfe, 0xff };

unsigned char test[16] = { 0x6b, 0xc1, 0xbe, 0xe2,
                                 0x2e, 0x40, 0x9f, 0x96,
                                 0xe9, 0x3d, 0x7e, 0x11,
                                 0x73, 0x93, 0x17, 0x2a };

EVP_CIPHER_CTX mCtx;
EVP_DecryptInit(&mCtx, EVP_aes_128_ctr(), key, IV);
int out_size;
EVP_DecryptUpdate(&mCtx, test, &out_size, test, 16);

【讨论】:

  • 我也尝试过加密(AES 128 CBC),它可以工作。
猜你喜欢
  • 2017-08-11
  • 2017-10-01
  • 2018-11-12
  • 2019-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
  • 2021-12-19
相关资源
最近更新 更多