繰り返しますが、mcrypt に問題があります。rinjdael-128 cfb モードで暗号化した php と c bei で、なぜ異なる結果が得られるのか疑問に思っています。これが私のphp関数です:
function mcencrypt($Clear, $Pass){
$td = mcrypt_module_open('rijndael-128', '', 'cfb', '');
$iv = 'AAAAAAAAAAAAAAAA';
mcrypt_generic_init($td, $Pass, $iv);
$encrypted = mcrypt_generic($td, $Clear);
mcrypt_generic_deinit($td);
return $encrypted;
}
そして私のc関数:
unsigned char *Encrypt( unsigned char *key, unsigned char *message, int buff_len){
unsigned char *Res;
MCRYPT mfd;
char* IV = "AAAAAAAAAAAAAAAA";
int i, blocks, key_size=16, block_size;
mfd = mcrypt_module_open("rijndael-128", NULL, "cfb", NULL);
block_size = mcrypt_enc_get_block_size(mfd);
blocks = ceil((double)buff_len/block_size);
mcrypt_generic_init(mfd, key, key_size, IV);
Res = calloc(1, (blocks *block_size)+1);
strncpy(Res, message, buff_len);
mcrypt_generic(mfd,Res,(blocks *block_size));
mcrypt_generic_deinit(mfd);
mcrypt_module_close(mfd);
return (Res);
}
それらを for ループで使用すると、最初の 26 の暗号化は正しいですが、27 では最後のツリー サインが異なります。これは本当に奇妙です。
PHP では、次のように for ループを作成します。
$seed ="m78otPfBLT48msvd";
$key = "r2oE61IQo7VwFXnF";
$start_y= mcencrypt($seed,$key);
$new =$start_y;
$enc_prob = mcencrypt($start_y,$key);
for ($j=1; $j<30;$j++){
$new.=$enc_prob;
echo "j: ".$j.'<br>';
echo "the new: ".$enc_prob."lenght: ".strlen($enc_prob).'<br>';
echo "new in hex for j=".$j.": ".strToHex($enc_prob).'<br>';
$enc_prob=mcencrypt($enc_prob,$key);
}
そしてcでは次のようになります:
int j, buff_len;
char seed[] = "m78otPfBLT48msvd", key1[]="r2oE61IQo7VwFXnF";
buff_len = strlen(seed);
unsigned char *encrypted, *encrypted2;
encrypted = Encrypt(key1, seed, buff_len);
encrypted2 = Encrypt(key1, encrypted, buff_len);
for (j=1; j<cols; j++) {
printf("j: %d\n", j);
printf("encrypted2 %s\n", string_to_hex(encrypted2, buff_len));
memcpy(encrypted2, Encrypt(key1, encrypted2, buff_len),buff_len);
}
free(encrypted);
free(encrypted2);
何がうまくいかないのですか。メッセージとキーは同じです。私は同じライブラリ、同じivを使用しています。理解できません。変です。これについて私を助けてください。よろしくお願いします!