1

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

4

1 回答 1

0

此文档页面上的警告表明,已弃用的 pkcs5_keyivgen 方法在与 AES 一起使用时会做一些非标准的事情。首先,它使用的是 PBKDF1,而不是 PBKDF2。

复制它的功能可能很困难,并且通常不建议实施加密算法,除非您确切地知道自己在做什么——即使专家也经常弄错。

于 2013-06-27T18:09:57.217 回答