2013-07-14 47 views
2

很明顯,算法如何管理純文本作爲字符字節值到狀態矩陣AES算法可以在純文本和字節序列上工作嗎?

但是AES加密二進制文件

算法如何管理大於16字節的文件,只要狀態爲標準化的爲4x4字節?

+0

很確定AES適用於任意數據。你正在試圖_implement_ AES,還是你正在使用一個庫? – zneak

+0

我只是在研究它,但我對低槓桿數學問題感到困惑 – diegoaguilar

+1

加密一般來說適用於二進制數據。如果你發現自己在用字符串的方式來思考事物,那麼你正在考慮錯誤的級別,例如如果你想加密一個字符串,你首先通過一個特定的編碼如UTF-8將它轉換爲一個字節序列。如果要將密鑰或加密結果存儲在字符串中,則需要再次使用合適的編碼。 Base64編碼。 –

回答

2

AES原語是允許加密/解密任意二進制流的結構的基礎。

AES-128採用128位密鑰和128位數據塊並「加密」或「解密」該塊。 128位是16個字節。這16個字節可以是文本(例如ASCII,每字節一個字符)或二進制數據。

一個幼稚的實現只會將一個長度超過16字節的文件分解成16個字節的組,然後用相同的密鑰加密這些文件。您可能還需要「填充」文件,使其成爲16個字節的倍數。問題在於它暴露了關於該文件的信息,因爲每次使用相同的密鑰加密相同的塊時,都會得到相同的密文。

構建AES功能有多種方法可以安全地加密/解密超過16個字節。例如,您可以使用CBC或使用counter mode

計數器模式有點容易解釋,所以我們來看看。如果我們有AES_e(k, b)用密鑰k加密塊b,我們不想重複使用相同的密鑰多次加密相同的塊。因此,我們將使用結構是這樣的: 計算AES_e(k, 0)AES_e(k, 1)AES_e(k, n)

現在我們可以採取任意輸入,它分成16點字節的塊,和XOR這個序列。由於攻擊者不知道他們的密鑰,他們不能重新生成這個序列並解碼我們的(更長的)消息。在上面生成的塊和明文之間逐位應用XOR。接收端現在可以生成相同的序列,與密文進行XOR並檢索明文。

在應用程序中,您還希望將此與某種身份驗證機制相結合,以便您可以使用AES-GCM或AES-CCM。

+0

我想得到更高級的槓桿說明。我只是無法圍繞數學低槓東西 – diegoaguilar

+0

@Diego:我會嘗試... –

+0

@Diego:這是你在找什麼?任何問題? –

1

想象一下你有一個17字節的純文本。狀態矩陣將用前16個字節填充,並且一個塊將被加密。 下一個塊將剩下1個字節,狀態矩陣將填充數據以填充這些16字節的AES需求。

它適用於字節/二進制文件,因爲AES總是考慮字節unities.如果這是一個ascii塊或任何其他想法無關緊要。請記住,計算機中的所有內容都是二進制/字節/位。一旦數據成爲流數據(以字節爲單位的信息塊),它就可以正常工作。

相關問題