好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

RSA密钥--JAVA和C#的区别及联系

首先感谢: http://HdhCmsTestcodeproject测试数据/Articles/25487/Cryptographic-Interoperability-Keys 的文章。

由于公司同时使用 .NET 和 JAVA ,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加密。因此会涉及到密钥的转换。所以大概看了下C#的秘钥跟JAVA的密钥区别。 RSA 对于程序本身是没有区别的,其格式都是相同的。对于不同的程序来说,存储使用的语法(包装的类)会有所不同。 RSA 语法和语法标准有很多,大的类型大概分为 ASN.1 、 PKCS 、 X.509 。

1、RSA语法介绍

ASN.1、PKCS 是最初的,也是最主要的RSA公钥和私钥的语法标准,被 RSA Lab 所维护。 ASN.1、PKCS#1 都定义了公钥和私钥的类型——序列化的数字。

为了下一个层次的抽象(适当的包装),现在一般使用的组合是: PKCS#8 的私钥, X.509 的公钥 。

PKCS 语法主要用于 私钥 ,其内部标准目前有10种。目前 JAVA 普遍使用的是 PKCS#8 ,用作私钥格式。 X.509 语法主要用于 公钥 ,广泛使用于 web 浏览器和 SLL 。 3种语法标准的公私钥可以实现相互转化,其核心为ASN1语法中的整数值( modulus , PublicExponent , privateExponent ),其余的数值都可以经过计算后得出。

.NET 使用的是标准的 RSA 格式,然后将其中的数字 base64 编码后,生成 XML 进行存储。 java中使用的是 PKCS#8 ,、 X.509 的公私钥语法,存储的都是相应的JAVA类自动生成的 base64 字符串。 由于存储格式的区别,在相互转换、读取的时候,需要理解 RSA 相关的知识,才能正确使用类来转换。

1.1 C#转JAVA

C# 中的公私钥使用XML字符串进行存储,读取时直接读入字符串即可。 由于C#使用的是标准的RSA格式,因此JAVA的R SAPublicKeySpec 、 RSAPrivateKeySpec 配置类的核心参数( modulus , PublicExponent , privateExponent )都可以从对应XML中的节点值( Modulus-modulus 、 Exponent-PublicExponent 、 D-privateExponent ) base64 解码后获取。然后将其传入JAVA配置类中,然后根据配置类生成相应的 RSA 公私钥。

View Code

1.2 JAVA转C#

JAVA 中的公私钥使用 base64 进行存储,解码成字节数组后,首先需要生成相应的配置对象( PKCS#8 ,、 X.509 ),根据配置对象生成 RSA 公私钥。

私钥:

C# 使用的是标准的 RSA 格式, PKCS#1 语法中包含了标准 RSA 格式私钥中的所有整数值。配置对象需要生成 PKCS#1 语法的 RSA 对象( RSAPrivateCrtKey ),获取对象属性,自行构造私钥 XML 。

View Code

公钥:

公钥跟私钥生成步骤相同,配置对象生成标准的 RSA 对象( RSAPublicKey )。

View Code

到此这篇关于RSA密钥--JAVA和C#的区别及联系的文章就介绍到这了,更多相关RSA密钥 JAVA C#内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

查看更多关于RSA密钥--JAVA和C#的区别及联系的详细内容...

  阅读:48次