将Ruby加密代码转换为Java

我在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"没有任何提供程序,我得到NoSuchAlgorithmexception。

  java.security.NoSuchAlgorithmException: PBKDF2WithMD5And256AES-CBC SecretKeyFactory not available 

pkcs5_keyivgen默认使用的盐也是空的!! 我不确定Java是否允许我使用null salt。

我怎样才能生成正确的IV?

此文档页面上的警告表明,与AES一起使用时,不推荐使用的pkcs5_keyivgen方法会执行非标准方法。 首先,它使用PBKDF1,而不是PBKDF2。

可能很难复制它的function,并且实施加密算法通常是不可取的,除非您确切知道自己在做什么 – 即使是专家经常会弄错。