Linux内核中的加密api用于AES错误

时间:2012-02-09 20:45:58

标签: linux kernel aes

我在linux内核中使用cryptoAPI的AES算法进行加密解密。如果在加密后立即进行解密,则以下代码可以正常工作。但我希望稍后这样做,然后给它垃圾。我正在存储加密密钥以供以后解密。

代码:

void encrypt(char *buf,u8 *key1)  
{    
    struct crypto_cipher *tfm;  
    int i,count,div,modd;  
    div=strlen(buf)/AES_BLOCK_SIZE;  
    modd=strlen(buf)%AES_BLOCK_SIZE;  
    if(modd>0)  
        div++;  
    count=div;  
    tfm=crypto_alloc_cipher("aes", 0, 16);    
    crypto_cipher_setkey(tfm,key1,16);    
    for(i=0;i<count;i++)  
    {  
        crypto_cipher_encrypt_one(tfm,buf,buf);      
        buf=buf+AES_BLOCK_SIZE;  
    }
    crypto_free_cipher(tfm);   
}  

和:

void decrypt(char *buf,u8 *key1)
{  
    struct crypto_cipher *tfm;  
    int i,count,div,modd;  
    div=strlen(buf)/AES_BLOCK_SIZE;  
    modd=strlen(buf)%AES_BLOCK_SIZE;  
    if(modd>0)  
        div++;  
    count=div;  
    tfm=crypto_alloc_cipher("aes", 0, 16);  
    crypto_cipher_setkey(tfm,key1,16);  
    for(i=0;i<count;i++)  
    {  
        crypto_cipher_decrypt_one(tfm,buf,buf);   
        buf=buf+AES_BLOCK_SIZE;  
    }  
}  

1 个答案:

答案 0 :(得分:0)

我认为这个api

crypto_cipher_encrypt_one(tfm,dst,src);

必须与src区别开来。也许你可以尝试分配dst [16]。

我尝试差异化,并取得成功。