我正在使用javax.crypto.KeyGenerator来生成密钥。
以下是我的AES代码:
assert { new Person("manu", "chadha").greater == "manu" }
DES代码:
Key key = null;
SecureRandom rand = new SecureRandom();
KeyGenerator generator;
try {
generator = KeyGenerator.getInstance("AES");
generator.init(rand);
generator.init(128);
key = generator.generateKey();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
System.out.println("AES key is : ");
System.out.println(Base64.getEncoder().encodeToString(key.getEncoded()));
正如您所看到的,当我使用DES时,我必须将56传递给init()方法,而不是AES中的128。
有人可以解释一下为什么我不能使用128位,哪种加密更适合这两种类型?
答案 0 :(得分:2)
AES是DES的高级版本,密钥大小更大。因此,如果您需要更安全的加密,那么使用AES应该是您的选择。
数据加密标准(DES):DES是Feistel Cipher的一种实现。它采用16圆形Feistel结构。块大小是 64位。虽然密钥长度为64位,但DES具有有效的密钥长度 56位,因为密钥的64位中的8位未被使用 加密算法(仅作为校验位)。
高级加密标准(AES):可能遇到的更受欢迎且广泛采用的对称加密算法 如今是高级加密标准(AES)。它被发现在 至少比三重DES快六倍。由于其密钥尺寸太小,因此需要替换DES。随着计算能力的提高,它被认为容易受到穷举密钥搜索攻击。三重DES旨在克服这一缺点,但发现它很慢