desedekeyspec错误的密钥大小



我需要使用双重长度3DES键来加密随机8字节,然后使用加密值来派生新的3DES键。

当我尝试使用EncryptedRandomValue实例化Desedekeyspec时,我会收到一个错误消息"错误的键大小"。您能告诉我如何解决这个问题吗?

desedekeyspec mykeyspec = new desedekeyspec(EncryptedRandOmvalue);

,如果我所有的秘密行动都是单个des键,我可以避免遇到此错误。但是我需要使用双重长度3DES键和ECB模式。

这是我的代码;

    // Generate double length 3DES Master Key
    KeyGenerator masterEncKeyGenerator = KeyGenerator.getInstance("DESede");
    masterEncKeyGenerator.init(112);
    SecretKey masterKey = masterEncKeyGenerator.generateKey();
    //Prepare random bytes
    byte[] randomKeyValue = "rn4yrbdy".getBytes();
    // Encrypt random bytes with the 3DES Master key
    final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, masterKey);
    byte[] encryptedRandomValue = cipher.doFinal(randomKeyValue);
    // Derive new key 3DES Key
    SecretKeyFactory mySecretKeyFactory = SecretKeyFactory.getInstance("DESede");
    DESedeKeySpec myKeySpec = new DESedeKeySpec(encryptedRandomValue);
    SecretKey derivedKey = mySecretKeyFactory.generateSecret(myKeySpec);

我意识到为什么我会遇到这个错误。这是因为Desedekeyspec需要将24个字节作为关键材料采用,但我只给出8个字节。但这就是我的要求:用Master 3DES键,随机8个字节数据...从加密中产生一个3DES键...

三重DES仅连续3个使用不同键完成的单个DES操作。具体来说,这是一个DES加密,然后是DES解密,然后是DES加密。

des e ncrypt- d ecrypt- ecrypt- e ncrypt ncrypt是使它赋予它名称 deside

截然不同的双重长度和Tripple长度键是您在三个DES操作中使用的密钥的哪一部分。

双重长度键:k1 || k2将提供以下DES操作:

Encrypt(k1) - Decrypt(k2) - Encrypt(k1)

tripple长度键:k1 || k2 || k3将提供以下DES操作:

Encrypt(k1) - Decrypt(k2) - Encrypt(k3)

Java中的标准实现不直接支持双重长度DES键,但是您可以通过重复键的第一部分作为第三部分来获得相同的效果:k1 || k2 || k1

作为好奇心,您可以通过三次重复单个des键,例如: k1 || k1 || k1。这简化了backword的兼容性硬件实现。

相关内容

  • 没有找到相关文章

最新更新