這裏的一個逐行分析:
DESKeySpec desKeySpec = new DESKeySpec(key);
上面的語句包表示爲8個字節作爲KeySpec陣列的密鑰。 KeySpec被描述爲「構成密鑰的密鑰材料的(透明)規範」。透明意味着你可以在裏面看。
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
上述語句獲得處理密鑰的關鍵工廠。在這種情況下,我們要求一個理解DES密鑰的工廠。
SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
上述語句將DES密鑰的透明形式轉換爲不透明形式。不透明意味着你無法在裏面看到它。或者至少,你不能沒有使用沙箱SecurityManager控制訪問的反射方法。
現在我不知道該SecretKey
與KeySpec
二分法的真正原因。這可能會使沙箱變得更容易,或者它可能只是過度設計的一個小例子。或者是其他東西。
這裏使用工廠的目的是允許應用程序混合使用加密技術。很明顯,你的代碼樣本硬連接了一種特定的技術(DES),但是當(例如)更高級別的協議(例如TLS)需要支持多種加密算法時,工廠方法會自行實現。
SecretKeyFactory.getInstance(...)
調用的目的也很明確。這是爲了避免對實現Java加密的實際類有明確的代碼依賴關係。必須這樣做,因爲這些類位於單獨的JAR文件中,可能會或可能不會出現在您的JRE中......正如美國出口法的規定。
因爲它是這樣設計的。因爲Date可變。因爲...... – 2011-03-07 10:54:53
你也可以在一行中完成:'SecretKey secretKey = SecretKeyFactory.getInstance(「DES」)。generateSecret(new DESKeySpec(key));'但它並不完全不適合可讀性:-) – 2011-03-07 10:55:10