2017-12-28 6 views
0

こんにちは皆さん、ありがとうございます。奇妙な動作のBitcoinライブラリ関数

だから私は、出力は次のことを、この.cppファイルを得た:

暗号=(奇妙caractersのバンチ)

Decryp =アロの月ココ

だから、すべてがうまくている...しかし、あれば私は次の出力を取得し、最初のものの上に第三のコメント行を入れ替え:

暗号=(奇妙caractersの束)アロの月ココ

Decryp =アロの月ココ

//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() 
     {} 
    } 

weird

not weird

私はそれはそれを行う理由を手掛かりを持っていません。あなたが理解すれば私に説明してください。

+0

'const unsigned char Key [16] =" Bob ";' - > 'std :: string Key =" Bob ";'。文字列を格納するには 'char []'の代わりに 'std :: string'を使います。 – Fureeish

+0

AES128CBCEncryptコンストラクタはconst unsigned char * –

+0

のみを受け付けます。' std :: string :: c_str() 'を確認してください – Fureeish

答えて

0

暗号化ライブラリー呼び出しは、ciptxt内の16個のメモリー・ロケーションすべてをロードしています。

"のstd :: coutを< < "暗号=" < < ciptxt < <のstd ::てendl;"ステートメントは、ciptxtがnullで終わると予測しますが、Encryptは16番目の位置にNULL以外の値を入れています。 std :: coutステートメントはメモリ内のヌル値に達するまで文字の印刷を続けます。これは、dcptxt char配列にヌルターミネータを検出しています。

+0

ああ!私は見るので、すべてが実際にうまいです。ありがとう、私はあなたの助けに感謝します。 –

0

私はビットコムライブラリについてはわかりませんが、と仮定して正しく動作しているため、おそらく原因は文字配列です。

CC++文字配列はnullで終了しなければなりません。そうでない場合、文字列の終わりを知らないので '\ 0'文字が見つかるまで文字を出力します。だからここで何が起きるかは、ヌルで終了していないので、基本的に別の文字配列からのメモリリークです。

これを修正するにはData[15] = '\0'を追加してください。

+0

ありがとうございます正しい方向への一歩でした! –