【发布时间】:2013-06-23 02:14:45
【问题描述】:
我在 ruby 中有一个旧代码,它使用 OpenSSL 进行加密
但是,我想用 Java 翻译这个,我迷路了。
到目前为止,我最大的障碍是弄清楚如何根据这段代码生成 IV。
任何帮助将不胜感激
def func_enc(data, key)
cipher = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
cipher.encrypt
cipher.pkcs5_keyivgen(key)
cipher.update(data)
encrypted_data << cipher.final
return encryptedData
end
编辑
澄清一下,我想为此使用 Java Crypto。这是我到目前为止提出的代码:
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithMD5And256AES-CBC");
KeySpec spec = new PBEKeySpec("Password".toCharArray(), null, 2048, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
但"PBKDF2WithMD5And256AES-CBC" 没有任何提供程序,我得到 NoSuchAlgorithm 异常。
java.security.NoSuchAlgorithmException: PBKDF2WithMD5And256AES-CBC SecretKeyFactory not available
同样pkcs5_keyivgen 默认使用的盐为空!!我不确定 Java 是否允许我使用空盐。
如何生成正确的 IV?
【问题讨论】:
-
是否有某些原因您不能利用现有的加密库?重复使用现有且经过良好测试的轮子会更好。
-
我已阅读文档但未提供“PBKDF2WithMD5And256AES-CBC”(也许我的名称有误?应该是 PBEWithMD5AndAES 吗?)。此外,当 ruby 代码加密数据时,返回的唯一内容是密文。解密时如何从密钥中检索 IV?
-
谁能帮我解决这个问题?我真的被困住了!
标签: java ruby security encryption openssl