大家好,并提前感谢您在这里度过的时光。
所以我得到了这个输出以下内容的.cpp文件:
Cipher =(一群奇怪的人物)
Decryp = Allo mon coco
所以一切都很好......但是如果我在第一个上面交换第三个注释行,我会得到以下输出:
Cipher =(一群奇怪的人物)Allo mon coco
Decryp = Allo mon coco
//Like that everything outputs well
#include "Crypto/MainCrypto.h"
namespace Crypto
{MainCrypto::MainCrypto()
{const unsigned char Key[16] = "Bob";
const unsigned char IV[16] = "Random";
AES128CBCEncrypt m_AES128CBCEncrypt(Key, IV, 0);
AES128CBCDecrypt m_AES128CBCDecrypt(Key, IV, 0);
unsigned char ciptxt[16]; //1
unsigned char dcptxt[16]; //2
unsigned char Data[16] = "Allo mon coco"; //3
m_AES128CBCEncrypt.Encrypt(Data, 16, ciptxt);
m_AES128CBCDecrypt.Decrypt(ciptxt, 16, dcptxt);
std::cout << "Cipher = " << ciptxt << std::endl;
std::cout << "Decryp = " << dcptxt << std::endl;
}
MainCrypto::~MainCrypto()
{}
}
//Like that, I'm getting unwanted Allo mon coco
#include "Crypto/MainCrypto.h"
namespace Crypto
{MainCrypto::MainCrypto()
{const unsigned char Key[16] = "Bob";
const unsigned char IV[16] = "Random";
AES128CBCEncrypt m_AES128CBCEncrypt(Key, IV, 0);
AES128CBCDecrypt m_AES128CBCDecrypt(Key, IV, 0);
unsigned char Data[16] = "Allo mon coco"; //3
unsigned char ciptxt[16]; //1
unsigned char dcptxt[16]; //2
m_AES128CBCEncrypt.Encrypt(Data, 16, ciptxt);
m_AES128CBCDecrypt.Decrypt(ciptxt, 16, dcptxt);
std::cout << "Cipher = " << ciptxt << std::endl;
std::cout << "Decryp = " << dcptxt << std::endl;
}
MainCrypto::~MainCrypto()
{}
}
我不知道为什么会这样做。如果你理解,请向我解释。
答案 0 :(得分:0)
我不确定比特币库,但我假设它正常工作,所以可能的罪魁祸首是char数组。
在C
和C++
字符数组中应该以空值终止,否则它将不知道字符串何时结束,因此它将输出字符,直到它找到&#39; \ 0&#39;字符。所以这里发生的事情基本上是来自另一个字符数组的内存泄漏,因为它不是空终止的。
要解决此问题,请添加Data[15] = '\0'
。
答案 1 :(得分:0)
加密库调用正在加载ciptxt中的所有16个内存位置。
&#34; std :: cout&lt;&lt; &#34; Cipher =&#34; &LT;&LT; ciptxt&lt;&lt;的std :: ENDL;&#34;声明期望ciptxt以null结尾,但Encrypt在第16个位置放置一个非null值。然后std :: cout语句将继续打印字符,直到它在内存中达到空值。它在dcptxt char数组中找到一个null终止符。