将Ruby加密代码转换为Java

时间:2013-06-26 04:33:35

标签: java ruby security encryption openssl

我在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?

1 个答案:

答案 0 :(得分:0)

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

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