【问题标题】:not-yet-commons SSL and Open SSL, Java and C++, Common Ground?尚未公用 SSL 和 Open SSL、Java 和 C++、共同点?
【发布时间】:2010-12-06 00:19:15
【问题描述】:

用于 Java 的 not-yet-commons SLL 包为 OpenSSL 对象提供了一种基于密码的加密方法:

加密(“des”,密码,数据);

据说此方法与 OpenSSL C 库兼容。我的问题是,什么是OpenSSL C++方法等价于上面的Java?

谢谢

【问题讨论】:

  • 与我的 open-ssl/java 体验相关:如果它不兼容开箱即用,请非常仔细地查看 openssl 选项,有时有一个选项没有很好的文档记录,但这会使OpenSSL 输出完全等同于 java 之一。示例:生成椭圆曲线key时,添加“EC_KEY_set_asn1_flag(ec_key, OPENSSL_EC_NAMED_CURVE);”在生成的公钥中使用曲线的名称(由java理解)而不是曲线的参数(仅由openssl理解)
  • 也许我可以更具体一些。在 Java I 中使用尚未通用的 SSL: encryptedString = OpenSSL.encrypt("des-ede3-cbc", passwordBytes, dataBytes);在 C 中的 OpenSSL 中,我可以执行以下操作: EVP_EncryptInit(&ctx, EVP_des_ede3_cbc(), (const unsigned char *)mykey, iv); EVP_EncryptUpdate(&ctx, ciphertext, &out_len, (const unsigned char *)plaintext, in_len); EVP_EncryptFinal(&ctx, &ciphertext[out_len], &out_len);我的问题是这些会产生截然不同的加密结果。事实上,java 结果是 3 或 4 倍的字节数。
  • @laura OpenSSL 不鼓励使用较低级别的 API,并希望每个人都使用 EVP_PKEY... API。我无法在 EVP_PKEY API 中找到任何等效的 EC_KEY_set_asn1_flag(ec_key, OPENSSL_EC_NAMED_CURVE)。你知道这方面的任何 API 吗?

标签: java c++ encryption openssl


【解决方案1】:

Not-Yet-Commons-OpenSSL 的密码与“openssl enc”命令兼容。您的示例可以通过此命令解密,

  openssl enc -k password -a -d -des -in data.file

您可以从源代码中复制代码,

http://cvs.openssl.org/fileview?f=openssl/apps/enc.c&v=1.45.2.5

【讨论】:

    【解决方案2】:

    EVP cipher functions 看起来是最接近的平行线。

    【讨论】:

    • 从我所读到的内容中,我假设 EVP 方法是使用 OpenSSL 的最佳方式。但是尚未通用的 OpenSSL Java 对象与什么 OpenSSL 模式/密码兼容?我知道 Java 和 OpenSSL 之间存在重叠,但我不知道哪些方法/模式可以创建兼容的加密,而且我对这个领域还是很陌生。
    【解决方案3】:

    OpenSSL.encrypt() 默认生成 base64 输出。使用 OpenSSL.encrypt(alg, pwd, data, false) 将其关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2012-12-15
      • 2018-03-01
      • 1970-01-01
      相关资源
      最近更新 更多