2012-04-25 61 views
0

如何創建一個密鑰和IV,使加密字符串應該只包含數字和字符串characters.key和IV字符串應該包含32 characters.purpose是加密的字符串不應當包含任何特殊characters.block大小256. 現在我正在使用這樣的密鑰和iv。在使用這個加密之後,使用特殊字符獲得加密的字符串。我們可以避免這種情況。Rijndael的256鍵

AES_KEY = PSVJQRk9QTEpNVU1DWUZCRVFGV1VVT0ZOV1RRU1NaWQ =

Aes_iv = YWlFLVEZZUFNaWlhPQ01ZT0lLWU5HTFJQVFNCRUJZVA =

+0

256位的塊大小是相當不尋常的,因爲它不是AES的一部分。 – CodesInChaos 2012-04-25 16:46:50

+0

我使用這篇文章。指定的代碼://blog.djekldevelopments.co.uk/ P = 334 問題是解密是不是在PHP工作,如果輸入contanins之類的特殊字符內「<」 – user922834 2012-04-25 16:59:35

+1

那博客作者顯然是?困惑。聲稱使用AES-256,但他使用Rijndael,塊大小爲256位。 – CodesInChaos 2012-04-25 17:02:55

回答

2

你需要Base64編碼輸出。這將確保它只是可打印的ASCII碼,並且是存儲/傳輸加密數據的標準。

你希望你的密鑰和IV的是完全隨機的。僅僅因爲你的鑰匙中沒有特殊字符,並不意味着你的輸出中不會有特殊字符。絕對沒有關係。它看起來像你的鑰匙和四是在那裏base64編碼。確保你使用的是原始密鑰和IV。

這裏是如何做到這一點在C#。假設你的AES輸出是一個字節數組:

 string encoded = System.Convert.ToBase64String(aesOutput); 

如果它是一個字符串:

 byte[] encodedBytes = System.Text.Encoding.ASCII.GetBytes(aesOutput); 
     string base64encoded = System.Convert.ToBase64String(encodedBytes); 

您可以使用System.Convert.FromBase64String(encodedData)轉換回它的原始輸出。

+0

打敗了我。 +1 – 2012-04-25 16:45:44

+0

我的疑問是,如果我們不使用特殊字符的關鍵和四,然後我們得到 – user922834 2012-04-25 17:10:11

+0

問題是解密不工作在PHP如果輸入包含特殊字符像'<' – user922834 2012-04-25 17:15:07