2

我正在尝试用 c 中的 libmcrypt 加密一个长字符数组。在我调用 encrypt funktion 超过 5 次后,我遇到了问题。我看不到错误,但我得到了奇怪的输出。如果我有一个 64 个字符的明文,它会加密前 32 个字符,然后对于最后 32 个字符,我会得到两次相同的 16 个字符。我希望你明白我的意思。这是我的代码:

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 个字节的纯文本,它就可以完美地工作。谢谢您的帮助!

4

0 回答 0