AES密钥派生函数

时间:2011-12-02 14:39:56

标签: java bash cryptography openssl 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在post中的答案尝试了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派生其密钥的方式?

0 个答案:

没有答案