KeyGenerator中AES与DES的密钥大小

时间:2017-12-05 06:26:06

标签: java encryption

我正在使用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位,哪种加密更适合这两种类型?

1 个答案:

答案 0 :(得分:2)

AES是DES的高级版本,密钥大小更大。因此,如果您需要更安全的加密,那么使用AES应该是您的选择。

  

数据加密标准(DES):DES是Feistel Cipher的一种实现。它采用16圆形Feistel结构。块大小是   64位。虽然密钥长度为64位,但DES具有有效的密钥长度   56位,因为密钥的64位中的8位未被使用   加密算法(仅作为校验位)。

     

高级加密标准(AES):可能遇到的更受欢迎且广泛采用的对称加密算法   如今是高级加密标准(AES)。它被发现在   至少比三重DES快六倍。由于其密钥尺寸太小,因此需要替换DES。随着计算能力的提高,它被认为容易受到穷举密钥搜索攻击。三重DES旨在克服这一缺点,但发现它很慢