2012-01-19 73 views
1

我已加密的文件在使用Linux內核(read_write.c)AES-256算法的創建期間: -加密和解密使用的功能的以下序列使用AES-256

  crypto_alloc_cipher() 
      crypto_cipher_setkey() 
      crypto_cipher_encrypt_one() 
      crypto_free_cipher() 

上述序列加密文件成功,但與解密函數(crypto_cipher_decrypt_one())相同的序列不解密該文件,任何人都可以幫助我PLZ。提前致謝。

+0

你傳遞給alloc-cipher的參數是什麼? (主要關心的是,如果你把它放入使用IV的東西,可能需要一直設置,如果你沒有設置它,它會使用內存中的任何值,每次調用都會有所不同) – Foon

+0

即時傳遞3個參數給crypto_alloc_cipher, 1.算法名稱 2. U32型和 3. U32掩模 如crypto_alloc_cipher( 「AES」,4,32), 即時傳遞這些相同的參數在這兩個加密和decyrption處理這個功能,是有什麼不正確的,如果是的話,你可以糾正它。 – Aliasgar

+0

plz幫助傢伙....... – Aliasgar

回答

0

我還沒有使用過這些功能(並且谷歌搜索功能不算太高),但我懷疑我知道發生了什麼。 AES是一個對稱密碼系統,這意味着您必須使用完全相同的密鑰進行編碼和解碼。如果調用相同的函數進行解碼,只是將解密函數調用替換爲加密函數調用,那麼似乎cipher_setkey函數調用可能會更改密碼密鑰,這意味着您正在使用的加密和解密密鑰是不同。

嘗試在encrypt_one函數後立即調用解密函數,並查看是否得到正確的明文。

+0

你對AES說什麼是正確的,我知道它,即時傳遞相同的密鑰加密s和解密,我交叉檢查了很多次,但它仍然不是解密文件,任何其他建議或建議是最受歡迎的 – Aliasgar

+0

plz help guys .......... – Aliasgar

2

我已經試過了,解密工作正常。這裏是我的代碼:

struct crypto_cipher *tfm; 
int i; 
u8 pkey[32] ={0xc1,0xb2,0x33,0x34,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x11, 
     0xc3,0xb4,0x32,0x34,5,6,7,8,9,0xa,0xb,0xc1,0xd,0xe1,0xf2,0x12}; 
u8 dest[32]; 
u8 dest2[32]; 
u8 src[32]= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,30,31,32,33,34,35,36,37,38,39,40,51,52}; 
tfm = crypto_alloc_cipher("aes", 4, CRYPTO_ALG_ASYNC); 
crypto_cipher_setkey(tfm, pkey, 32); 

crypto_cipher_encrypt_one(tfm, dest, src); 
crypto_cipher_encrypt_one(tfm, &dest[16], &src[16]); 

crypto_cipher_decrypt_one(tfm, dest2, dest); 
crypto_cipher_decrypt_one(tfm, &dest2[16], &dest[16]); 



for (i=0; i<32; i++) 
{ 
    pr_info("%x ", dest2[i]); 
} 


    crypto_free_cipher(tfm); 

的printk的結果是預期和dest2陣列只是同SRC陣列。

+0

「pkey」和「src」中的神奇數字是什麼? – nalply