-2

Visual Studio2010Professionalのac++プロジェクトにキーを挿入するときに小さな問題が発生します。

キーを配置すると、最初の2つのキーのみが受け入れられます。これは、最初の2文字で始まる同様のキーを配置するときに問題になる可能性があります。

ただし、キーを16進文字で直接入力すると、すべてが検証されます。

私が学んでいることはほとんどないことを事前に明確にしますc++これは私が今のところ行ったことです。

    //****************** AES decryption ********************
const int size = 32;
unsigned char aesKey[size];
char* p;

for (int i = 1; i < argc || i < size; ++i)
{
    aesKey[i] = (unsigned char)strtol(argv[2], &p, 16);
} 

unsigned char *buf;

aes256_context ctx;
aes256_init(&ctx, aesKey);

for (unsigned long i = 0; i < lSize/16; i++) {
    buf = text + (i * 16);
    aes256_decrypt_ecb(&ctx, buf);
}

aes256_done(&ctx);
//******************************************************

引数argv[2]があるのは、引数2を使用する必要があるためです。

提案やアイデア、ありがとう

4

1 に答える 1

1

このコードには多くの修正が含まれている可能性がありますが、これは私が見ることができる基本的なものです

//****************** AES decryption ********************
const int size = 32;
unsigned char aesKey[size];
char* p;

//check you have argv[2]
if (argc < 3)
{
    //TODO: return or handle the error as you wish...
}

//i need to start from 0 (it's a zero base index)
//argc = argument count. and this should not be here
//you have 3 arguments and this is why it read 2 chars...
for (int i = 0;i < size; ++i)
{
    aesKey[i] = (unsigned char)strtol(argv[2], &p, 16);
} 

unsigned char *buf;

aes256_context ctx;
aes256_init(&ctx, aesKey);

//I don't know where lsize is coming from but I would calculate the division out side:
unsigned long myMax = lSize/16;
for (unsigned long i = 0; i < myMax; i++) {
    buf = text + (i * 16);
    aes256_decrypt_ecb(&ctx, buf);
}

aes256_done(&ctx);
//******************************************************
于 2013-01-16T12:33:58.333 に答える