【问题标题】:perl CBC DES equivalent in javajava中的perl CBC DES等价物
【发布时间】:2014-02-27 19:39:16
【问题描述】:

我们正在将一些代码从 perl 迁移到 java/scala,但遇到了障碍。

我们正试图弄清楚如何在 Java/scala 中做到这一点:

use Crypt::CBC;
$aesKey         = "some key"
$cipher = new Crypt::CBC($aesKey, "DES");
$encrypted = $cipher->encrypt("hello world");
print $encrypted    // prints:  Salted__�,%�8XL�/1�&�n;����쀍c
$decrypted = $cipher->decrypt($encrypted);
print $decrypted    // prints: hello world

我在 scala 中尝试了一些东西,但并没有真正做到正确,例如:

  val secretKey = new SecretKeySpec("some key".getBytes("UTF-8"), "DES")
  val encipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
  encipher.init(Cipher.ENCRYPT_MODE, secretKey)
  val encrypted = encipher.doFinal(bytes)

  println("BYTES:" + bytes)
  println("ENCRYPTED!!!!!!: " + encrypted)
  println(toString(encrypted))

非常感谢 Java/scala 方面的任何帮助或指导

【问题讨论】:

  • 那么出了什么问题?请添加您的问题和相关输出,以目前的形式,您的问题很可能会被关闭。
  • 另外你为什么要从一个 Voodoo 迁移到另一个?
  • @LucasKauffman 好吧..我的问题是我想知道如何在 java 中获得相同的加密...我希望能够在 Java 中解密由 perl 代码加密的内容(我无法控制)
  • 我懂 Java,只是不喜欢 Scala :p
  • 呵呵,但 Scala 很酷!但是 Java 答案会起作用:)

标签: java aes des


【解决方案1】:

假设 Crypt 模块是我在 https://metacpan.org/pod/Crypt::CBC 找到的模块,它被记录为默认执行(与)openssl 相同,显然意味着命令行“enc”(openssl 库还有许多其他选项)。那不是加密 直接使用指定的密钥(和 IV),而是使用从指定的“密钥”(真正的密码)加上(传输的)盐派生的密钥和 IV 进行“基于密码的”加密 (PBE),使用对原始 (现在不推荐)PKCS#5 v1.5 算法,改名 PBKDF1。请参阅http://www.openssl.org/docs/crypto/EVP_BytesToKey.html(或安装了 openssl 的 Unix 系统上的手册页)和 rfc2898(或现在 EMC 某处的原始 RSA Labs PKCS 文档)。

您说您无法更改 perl 发件人。我希望用户/所有者/任何意识到原始 DES 的人, 为清楚起见,重新命名为单 DES,十多年来实际上一直是暴力破解的,并且 PBE-1DES 可能更弱; openssl 扭曲不会像 PKCS#5(KDF1 和 KDF2)那样迭代。

Java(使用 Suncle 提供程序)确实实现了 PBEWithMD5AndDES,它使用 PBEParameterSpec (salt, 1) 初始化 确实成功地解密了来自“openssl enc -des-cbc”的数据,因此我也希望你的 perl 发件人(未经测试)。 FWIW,如果您可以更改为三重 DES,Java 使用明显非标准的方式实现 PBEWithMD5AndTripleDES PBKDF1 的扩展(超出散列大小)与 openssl 的非标准扩展完全不同,因此如果 perl 模块实际上遵循 openssl 则不兼容。 您必须自己进行密钥派生,然后直接使用 3DES-CBC-pad,这并不难。

另请注意,来自任何现代计算机算法的加密数据都是二进制的。像文本一样“打印”它 在 perl、Java 或几乎其他任何东西中,如果您再次尝试使用它,可能会导致数据损坏。 如果您只是想查看“是否有任何输出,并且明显不是明文”,那没关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2021-02-17
    • 2011-03-08
    • 2019-11-03
    • 1970-01-01
    相关资源
    最近更新 更多