gpt4 book ai didi

java - 将 Ruby 加密代码转换为 Java

转载 作者:行者123 更新时间:2023-12-01 04:36:09 25 4
gpt4 key购买 nike

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

最佳答案

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

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

关于java - 将 Ruby 加密代码转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17311623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com