小编sch*_*r22的帖子

使用c ++,Openssl和aes加密和解密字符串

我正在尝试使用c ++ openssl和aes cbc加密和解密字符串.

关于这一点的奇怪之处在于,它可以在一台PC上运行,而在另一台PC上却没有.我只有3/4的原始字符串,所以结尾是错误的.

另一个奇怪的是,当我在第二台PC上的exe文件目录中添加一个名为"libeay32.dll"的DLL时,它可以工作,但不能在第一台PC上运行.

总之,第一台PC只能在没有dll的情况下工作,第二台PC只能用于dll.

我的问题是,这段代码可以改进吗,为什么在一台计算机上需要这个dll而在另一台计算机上不需要.

这是我已经写的:

KEY和Iv定义如下:

#define KEY "abc"
#define Iv  "abc"
Run Code Online (Sandbox Code Playgroud)

加密功能:

string aes_encrypt(string _InStr)
{
    string  EncKey,
            EncIV;

    AES_KEY enc_key;

    unsigned char * aes_key   = (unsigned char *) malloc (sizeof(unsigned char) * (32)),
                  * iv_enc    = (unsigned char *) malloc (sizeof(unsigned char) * AES_BLOCK_SIZE),
                  * aes_input = (unsigned char *) malloc (sizeof(unsigned char) * _InStr.size ()),
                  * enc_out   = (unsigned char *) malloc (sizeof(unsigned char) * ((_InStr.size () + AES_BLOCK_SIZE) / AES_BLOCK_SIZE) * AES_BLOCK_SIZE); …
Run Code Online (Sandbox Code Playgroud)

c++ encryption dll openssl aes

6
推荐指数
1
解决办法
8201
查看次数

C++:将读取的二进制文件存储到缓冲区中

我正在尝试读取二进制文件并将其存储在缓冲区中.问题是,在二进制文件中是多个以空字符结尾的字符,但它们不在最后,而是在其他二进制文本之前,所以如果我将文本存储在'\ 0'之后它只是删除它缓冲.

例:

char * a = "this is a\0 test";
cout << a;
Run Code Online (Sandbox Code Playgroud)

这只会输出: this is a

这是我的真实代码:

此函数读取一个字符

bool CStream::Read  (int * _OutChar)
{
    if (!bInitialized)
        return false;

    int iReturn = 0;

     *_OutChar = fgetc (pFile);

    if (*_OutChar == EOF)
        return false;

    return true;
}
Run Code Online (Sandbox Code Playgroud)

这就是我使用它的方式:

    char * SendData = new char[4096 + 1];

    for (i = 0; i < 4096; i++)
    {
        if (Stream.Read (&iChar))
            SendData[i] = iChar;
        else
            break;
    }
Run Code Online (Sandbox Code Playgroud)

c++ buffer fgets null-terminated

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

aes ×1

buffer ×1

dll ×1

encryption ×1

fgets ×1

null-terminated ×1

openssl ×1