gpt4 book ai didi

c++ - 使用C++加密和解密

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:50 26 4
gpt4 key购买 nike

我有一个缓冲区,我要在其中添加一些纯文本。我想使用 openssl AES 加密来加密文本,然后解密它,并在屏幕上打印出来。

代码运行没有错误。

#include <fstream>
#include <iostream>
#include <stdio.h>
#include <string>
#include <openssl/aes.h>
using namespace std;

void main()
{

// Buffers
unsigned char inbuffer[1024];
unsigned char encryptedbuffer[1024];
unsigned char outbuffer[1024];


// CODE FOR ENCRYPTION
//--------------------
unsigned char oneKey[] = "abc";
AES_KEY key;

AES_set_encrypt_key(oneKey,128,&key);
AES_set_decrypt_key(oneKey,128,&key);

//--------------------


string straa("hello world\n");
memcpy((char*)inbuffer,straa.c_str(),13);


printf("%s",inbuffer);
//this prints out fine

AES_encrypt(inbuffer,encryptedbuffer,&key);
//printf("%s",encryptedbuffer);
//this is expected to pring out rubbish, so is commented

AES_decrypt(encryptedbuffer,outbuffer,&key);
printf("%s",outbuffer);
//this is not pringint "hello world"

getchar();

}

我知道一旦放入新缓冲区“encryptedbuffer”和“outbuffer”,它们就不会以空值结尾“\0”,但即便如此,通过打印出原始数据,我只是解密后变得垃圾,在解密结束时,我假设\0 也应该被解密,因此 printf 应该正确打印。

有人知道如何使解密工作吗?

还知道如何使用 C++ 库打印缓冲区,也许是 cout,而不是 printf?

最佳答案

我注意到几个可能的问题:

  • 对 AES_set_decrypt_key 的调用使用与之前调用相同的 key,从而覆盖 key 值。要像这样预先进行两个调用,有必要使用单独的键实例。否则等到调用 AES_set_decrypt_key 直到加密完成。
  • 传递给 AES_set_encrypt_key 的 key 缓冲区对于 128 位深度需要 16 个字节长。实际上,它将读取 16 个字节,但这些字节的内容是未定义的。

关于c++ - 使用C++加密和解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21445309/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com