众所周知,Openssl是加密世界的标准。 Openssl是用纯C编写的,所以问题在于如何在不同的语言中使用Opnessl?这样的Java。虽然Java提供JCE
和BouncyCastle
,但很难知道它们是否存在实现偏差,即对于相同的输入(合法或无效),JCE和Openssl输出的结果不同。
到目前为止我想出的是直接调用openssl命令。在实际产品中,如何解决这个问题?
非常感谢任何帮助。
答案 0 :(得分:1)
OpenSSL使用标准化算法,这意味着无论您使用哪个库,相同密钥和算法的解密结果都是相同的。
例如:
如果您使用密钥“我是河豚”使用BlowFish加密算法,并使用OpenSSL加密它,您可以使用任何要解密的库并获得相同的结果。
话虽如此,可以在任何语言或操作系统中使用OpenSSL库(通常是libcrypto和libssl)。它确实需要一些管道。
在您的示例中,您可以使用JNI直接访问OpenSSL库函数
这种方法要求您确保为目标体系结构和操作系统提供了正确的库。
个人? 我会看到检查为什么存在偏差,因为这是您的主要问题。
答案 1 :(得分:1)
如何在不同语言中使用Opnessl?这样的Java。
在Java中使用 JNI 。它可以非常快。注意JNI的“固定”概念 - 本机方法接收到元素的直接指针 - 无需复制 - 但这有一些含义。固定是可选的。要使用JNI,通常应该创建包装器函数来调用目标函数(在我们的例子中是OpenSSL)。所以你应该根据JNI规则(参数类型jint等)创建共享库(DLL左右)并调用OpenSSL函数。
它取决于语言 - 通常在托管语言中,您应该包装C代码(例如在COM或托管C ++中用于.NET)。在C ++中 - 直接。 C#还具有调用C函数的机制。