キーファイルの長さが256ビットの暗号をコーディングしています。そのうち 128 ビットがキーに、128 ビットが IV に入る必要があります。私はこれらの配列のサイズを明示的に定義してから読み取りますが、それでも得られる出力は、148 ビットのように設定された Key ですが、IV はそれよりも小さいです。そして最後に、スタック破壊エラーが発生します。
int main(int argc,char *argv[]) {
if(argc < 4 || !argv[1] || !argv[2]) {
cout << "Usage: Encoding: " << argv[0] << " [plaintext-file] [key-file] [cipher-file]" << endl;
cout << "Usage: Decoding: " << argv[0] << " [cipher-file] [key-file] [plaintext-file]" << endl;
return 0;
}
unsigned char key[16], iv[16];
unsigned long i;
// read input file and size etc
FILE* in_file = fopen(argv[1],"rb");
if(!in_file) {
cout << "Error opening read file" << endl;
return 0;
}
fseek(in_file,0,SEEK_END);
unsigned int msglength = ftell(in_file);
cout << "Msglength:" << msglength << endl;
unsigned char * mem_ptr = (unsigned char*)malloc(msglength);
if(!mem_ptr) {
cout << "Error allocating memory" << endl;
fclose(in_file);
return 0;
}
rewind(in_file);
fread(mem_ptr,1,msglength,in_file);
fclose(in_file);
// read keyfile etc
FILE* key_file = fopen(argv[2],"rb");
if(!key_file) {
cout << "Error opening key file" << endl;
return 0;
}
fseek(key_file,0,SEEK_END);
unsigned int key_size = ftell(key_file);
cout << "Key Size:" << key_size << endl;
unsigned char * key_ptr = (unsigned char*)malloc(key_size);
if(!key_ptr) {
cout << "Error allocating memory" << endl;
fclose(key_file);
return 0;
}
rewind(key_file);
fread(key_ptr,1,key_size,key_file);
cout << "sizeof key"<<sizeof(key)<<" sizeof iv" << sizeof(iv) << endl;
for (i=0; i<256; i++) {
if (i<128) key[i] = key_ptr[i];
else iv[i-128] = key_ptr[i];
}
cout << key_ptr << endl;
cout << "Key:" << key << endl << "IV:" << iv << endl;
}
出力
Msglength:15
Key Size:257
sizeof key16 sizeof iv16
abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678
Key:abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678
IV:abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678abcdefgh12345678
*** stack smashing detected ***: ./a.out terminated
Segmentation fault (core dumped)
どこが間違っているのでしょうか?