c で libmcrypt を使用して長い char 配列を暗号化しようとしています。暗号化関数を 5 回以上呼び出した後、問題が発生しました。間違いはわかりませんが、奇妙な出力が得られます。64 文字の平文がある場合、最初の 32 文字が暗号化され、最後の 32 文字は同じ 16 文字の 2 倍になります。私が言いたいことを理解していただければ幸いです。ここに私のコード:
char *Encrypt( char *key, char *message, int buff_len){
unsigned char *Res;
MCRYPT mfd;
char *IV;
int i, blocks, key_size=16, block_size;
mfd = mcrypt_module_open(MCRYPT_RIJNDAEL_128, NULL, "ecb", 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);
//memset(message,'\0',blocks *block_size);
mcrypt_generic(mfd,Res,(blocks *block_size));
//printf("the encrypted in function(Encrypt) %s len %d\n",Res, strlen(Res));
mcrypt_generic_deinit(mfd);
mcrypt_module_close(mfd);
return (Res);
}
そして主に私が呼ぶ:
char seed[] = "thesecretmessage which I really want to check if if works", key1[]="abcdefghijklmnop";
int buff_len = strlen(seed), i;
char *encrypted = Encrypt(key1, seed, buff_len), *encrypted_pr=Encrypt(key1, encrypted, buff_len);
printf("the encrypted %s, %d\n", encrypted, strlen(encrypted));
printf("the encrypted_pr %s, %d\n", encrypted_pr, strlen(encrypted_pr));
for(i=0;i<15;i++){
memcpy(encrypted2, Encrypt(key1, encrypted2, buff_len),64);
printf("the encrypted_pr[%d] %s\n",i, encrypted_pr);
}
私は本当にこれに夢中になっています。わずか 16 バイトの平文があれば、完全に機能します。助けてくれてありがとう!