2014-09-18 120 views
-4

我正在嘗試編寫將使用1024字節密鑰進行AES-256加密/解密的Java代碼。我研究了互聯網的實施,並且有很多方法可以實施。使用1024字節密鑰實現AES-256

我看了看下面的教程:

  1. http://karanbalkar.com/2014/02/tutorial-76-implement-aes-256-encryptiondecryption-using-java/
  2. https://gist.github.com/bricef/2436364

,但沒有發現有需要的哪些步驟。所以我的問題是我需要啓動encryptiopn/decryption。不指定算法(AES-256)和密鑰是否足夠?我需要調用哪些API?


此外,我打算寫一個工具類與暴露加密和解密的兩種方法。我打算在構造函數中初始化所有這些設置。所以建議我把這個類放到我的Spring web應用程序中。

+3

由於密鑰大小爲256位,AES-256的名稱中沒有256個? – soulcheck 2014-09-18 21:35:44

+0

是嗎?我認爲256是數據分組編碼的大小。而1024是我們使用的密鑰的大小。 – 2014-09-19 03:31:20

+1

256是關鍵尺寸... – ChiaraHsieh 2014-09-19 05:51:20

回答

2

AES is only defined for 128, 192 and 256 bit keys。這些分別被稱爲AES-128,AES-192和AES-256。所以你不能在AES中使用1024字節密鑰。

AES塊大小(您所描述的「數據爲編碼分組的大小」)始終爲AES的128位。 Rijndael,它的一個子集成爲AES,除了128位塊之外,還支持256位塊。對於1024字節的密鑰,Rijndael和AES都沒有定義。

如果你有這麼大的密鑰材料,你可以使用像SHA-256這樣的散列或象HKDF這樣的適當的KDF將它減少到256位。顯然這會將安全級別降低到256位,但這仍然很多。爲什麼AES沒有被定義爲更大的密鑰的原因是傳統的計算機永遠不能暴力破解256位的密鑰。請參閱crypto.se上的How much would it cost in U.S. dollars to brute force a 256 bit key in a year?

+0

有沒有我可以開始使用的Java代碼。有不同的實施。我想要一個簡單的。我正在更具體地瞭解輸入是什麼樣的(鍵,鍵等等),我可以使用哪些Java API? – 2014-09-19 13:48:39

+1

@ user4035943使用支持AES-GCM的東西。並且絕對確保你**不再重用(密鑰,隨機數)對**。 – CodesInChaos 2014-09-19 14:43:19