2011-03-07 164 views
0

我需要生成用於DES算法的密鑰明白,爲什麼我們應該寫所有這些步驟用java生成DES算法的密鑰:爲什麼我們應該寫所有這些步驟用java

DESKeySpec desKeySpec = new DESKeySpec(key); 
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 
SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 

誰能解釋?

+1

因爲它是這樣設計的。因爲Date可變。因爲...... – 2011-03-07 10:54:53

+0

你也可以在一行中完成:'SecretKey secretKey = SecretKeyFactory.getInstance(「DES」)。generateSecret(new DESKeySpec(key));'但它並不完全不適合可讀性:-) – 2011-03-07 10:55:10

回答

1

因爲它是使用Abstract Factory Pattern設計的。他們的目標(可以是錯誤的):

的客戶端不知道(或護理) 從這些內部工廠 得到,因爲它 其具體對象只使用的 其產品的通用接口。這種模式將 對象的實現細節與其一般用法分開。

+0

即時通訊非常抱歉,我仍然無法理解secretkey,SecretKeyFactory和generatekey的用途。 – 2011-03-07 11:12:53

+0

爲什麼我不會調用某個函數並將其作爲參數賦予它的關鍵。爲什麼所有這些步驟? – 2011-03-07 11:14:20

+0

我試圖閱讀每個類的描述..但我不知道如何區分和如何得到它 – 2011-03-07 11:15:04

3

這裏的一個逐行分析:

DESKeySpec desKeySpec = new DESKeySpec(key); 

上面的語句包表示爲8個字節作爲KeySpec陣列的密鑰。 KeySpec被描述爲「構成密鑰的密鑰材料的(透明)規範」。透明意味着你可以在裏面看。

SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); 

上述語句獲得處理密鑰的關鍵工廠。在這種情況下,我們要求一個理解DES密鑰的工廠。

SecretKey secretKey = keyFactory.generateSecret(desKeySpec); 

上述語句將DES密鑰的透明形式轉換爲不透明形式。不透明意味着你無法在裏面看到它。或者至少,你不能沒有使用沙箱SecurityManager控制訪問的反射方法。


現在我不知道該SecretKeyKeySpec二分法的真正原因。這可能會使沙箱變得更容易,或者它可能只是過度設計的一個小例子。或者是其他東西。

這裏使用工廠的目的是允許應用程序混合使用加密技術。很明顯,你的代碼樣本硬連接了一種特定的技術(DES),但是當(例如)更高級別的協議(例如TLS)需要支持多種加密算法時,工廠方法會自行實現。

SecretKeyFactory.getInstance(...)調用的目的也很明確。這是爲了避免對實現Java加密的實際類有明確的代碼依賴關係。必須這樣做,因爲這些類位於單獨的JAR文件中,可能會或可能不會出現在您的JRE中......正如美國出口法的規定。

相關問題