【发布时间】: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