我正在尝试使用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) 我正在尝试读取二进制文件并将其存储在缓冲区中.问题是,在二进制文件中是多个以空字符结尾的字符,但它们不在最后,而是在其他二进制文本之前,所以如果我将文本存储在'\ 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)