1

C++ プロジェクトに AES 暗号化機能を追加する必要があります。これまでのところ、コード プロジェクトのラッパー クラスを作成しようとしています。次の機能を持つAES++ の C++ 実装:

  • char* Encrypt(string& InputData); //takes plain text and returns encrypted data
  • char* Decrypt(string& InputData); //takes encrypted data and returns plain text

しかし、コードをテストすると、データの最初の 32 バイトだけが暗号化および復号化されます。

出力の最終行は次のとおりです。

暗号テストです My name

残りの文字列を見逃す原因は何ですか? 私は何が欠けていますか?

#include "Rijndael.h"
#include <iostream>
#include <string>

using namespace std;

string LenMod(string Input);

char* Encrypt(string& InputData)
{
    try
    {
        InputData = LenMod(InputData);
        char* OutputData = (char*)malloc(InputData.size() + 1); 
        memset(OutputData, 0, sizeof(OutputData));

        CRijndael AESEncrypter;

        AESEncrypter.MakeKey("HiLCoE School of Computer Science and Technology",CRijndael::sm_chain0, 16 , 16);

        AESEncrypter.Encrypt(InputData.c_str(), OutputData, sizeof(InputData), CRijndael::ECB);

        return OutputData;
    }
    catch(exception e)
    {
        cout<<e.what();
        return NULL;
    }
}

char* Decrypt(string& Input)
{
    try
    {
        Input = LenMod(Input);
        char* Output = (char*)malloc(Input.size() + 1); 
        memset(Output, 0, sizeof(Output));

        CRijndael AESDecrypter;

        AESDecrypter.MakeKey("HiLCoE School of Computer Science and Technology",CRijndael::sm_chain0, 16, 16);

        AESDecrypter.Decrypt(Input.c_str(), Output, sizeof(Input), CRijndael::ECB); 

        return Output;
    }
    catch(exception e)
    {
        cout<<e.what();
        return NULL;
    }
}

string LenMod(string Input)
{
    while(Input.length() % 16 != 0)
        Input += '\0';

    return Input;
}

int main()
{

    string s = "This is Encryption Test My name is yohannes tamru i am a computer science student";

    //cout<<LengthMod(s)<<endl;
    string temp1(Encrypt(s));
    string temp2(Decrypt(temp1));

    cout<<temp1<<endl<<endl<<temp2<<endl;

    system("pause");
return 0;
}
4

0 に答える 0