2011-03-07 143 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中......正如美国出口法的规定。

相关问题