【问题标题】:Open SSL simple encrypt / decrypt C++打开 SSL 简单加密/解密 C++
【发布时间】:2019-01-10 17:05:16
【问题描述】:

我使用以下代码加密和解密 XML 文件:

int bytes_read, bytes_written;
unsigned char indata[AES_BLOCK_SIZE];
unsigned char outdata[AES_BLOCK_SIZE];
unsigned char ckey[] = "thiskeyisverybad";
unsigned char ivec[] = "dontusethisinput";

AES_KEY key;

AES_set_encrypt_key(ckey, 128, &key);

int num = 0;
FILE * ifp = fopen("Test.XML","rb");
FILE * ofp = fopen("Enc.XML", "wb");
while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifp);

    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec,&num,AES_ENCRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofp);
    if (bytes_read < AES_BLOCK_SIZE)
        break;
}

num = 0;
FILE * ifpe = fopen("Enc.XML", "wb");
FILE * ofpe = fopen("TestDec.XML", "rb");

while (1) {
    bytes_read = fread(indata, 1, AES_BLOCK_SIZE, ifpe);
    AES_cfb128_encrypt(indata, outdata, bytes_read, &key, ivec, &num, AES_DECRYPT);

    bytes_written = fwrite(outdata, 1, bytes_read, ofpe);
    if (bytes_read < AES_BLOCK_SIZE)
        break;
}

我参考了链接Encrypting and decrypting a small file using openssl。我在 Enc.XML 中得到一个加密文件。当我尝试解密代码时,空白记录会创建一个文件。想知道解密代码中遗漏了什么。

【问题讨论】:

  • 我能知道投反对票的原因吗?我已经在堆栈溢出本身中找到了回复,但是解密逻辑不起作用。
  • 你的明文是什么? (也就是Text.XML里面是什么?)
  • 内容没关系,它是一个XML文件。下面的答案解决了我的疑问。想知道为什么这个问题被否决了。

标签: c++ encryption openssl


【解决方案1】:

每次调用 AES_cfb128_encrypt 都会修改“ivec”缓冲区。如果您的代码不是两个程序而是一个问题,就像上面的那样,那么您需要在尝试解密之前将“ivec”缓冲区重置为原始值。

类似:

char ivec[16];
…
memcpy(ivec, "dontusethisinput", 16);
… encrypt code
memcpy(ivec, "dontusethisinput", 16);
… decrypt code

【讨论】:

  • 感谢您的回答。现在解密一切正常。我有一个包含 66000 行的文件,在解密的文件中我可以看到几行丢失。这可能是什么原因?
  • 准确地说是653272行被解密
  • 在使用 fclose 发布 encypt 调用后工作。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-11-28
  • 2017-04-19
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多