这里的一个逐行分析:
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