AES密钥派生函数
我有一个使用openssl加密数据的bash脚本,以及解密结果的Java代码。 基于我之前的post ,我现在能够在openssl中输入密码,并将生成的密钥/ iv复制到Java中。 这依赖于在openssl中使用-naltalt选项。 我想删除该选项,并从openssl获取密码/ salt / iv并将其传递给JDK密钥派生函数。
这是我正在使用的openssl脚本:
#!/bin/bash openssl enc -aes-128-cbc -in test -out test.enc -p
当我运行它并输入密码时,它会打印出以下内容。
salt=820E005048F1DF74 key=16023FBEB58DF4EB36229286419F4589 iv=DE46F8904224A0E86E8F8F08F03BCC1A
当我在Java中尝试相同的密码/ salt / iv时,我无法解密test.enc。 我在这篇文章中根据@erickson的答案尝试了Java代码。 这是片段。
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1"); KeySpec spec = new PBEKeySpec(password, salt, 1024, 128); SecretKey tmp = factory.generateSecret(spec); SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
如果我打印出生成的“秘密”,它与openssl打印的“密钥”不同。 我是否需要更改其中一个Java参数以匹配openssl如何获取其密钥?
- 尝试加密字符串时为什么会出现BadPaddingException?
- 在没有无限强度的JCE文件的情况下,AES256加密解密是否可行?
- AES文件解密“给定最终块未正确填充”
- 没有正确加密和解密
- java aes 256 java.security.InvalidKeyException:安装策略后出现非法密钥大小
- PBEWITHSHA256AND128BITAES-CBC-BC在RedHat 6.4上创建java.security.NoSuchAlgorithmException
- Java AES加密和解密
- AES-256和PKCS7Padding在Java中失败
- Java使用AES 256和128对称密钥加密