【问题标题】:Translating Ruby encryption code to Java将 Ruby 加密代码转换为 Java
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    相关资源
    最近更新 更多