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