这一章呢,我们来看看Java如何实现RSA加密。
啊?为什么?要想比较差别,当然得看看人家怎么加密的。
前面只讲了C#怎么实现RSA加密解密,签名验签,有关Java的也只是讲了如何去生成pem格式公钥私钥以及怎么转化,但是并没有讲解到Java与C#签名时候的注意点,尤其是对接。
这里就要说到本文的由来,对接一个项目,对方公司程序为java语言编写,我司程序为C#语言编写,对方提供的对接Demo中.NET程序居然无法正常运行,于是,我就找到对方技术人员提供可用的示例对接Demo,对方技术人员来了一句”我不懂.NET”。没毛病,我也不懂Java,我知道那种痛。所以为了不让更多人痛,我就写了这边文章。
这里提供一段Java代码,作用是实现RSA签名(真特么难啊,为了一个base64转码,搜了一上午解决方案)
箭头所指,是签名时候使用的算法,在C#中是没有"MD5WithRSA"这样的写法的,所以在这里提供一个参照表,在使用我写的加密帮助类时,的对应关系。
Java签名时 |
C#/.NET(签名枚举选择) |
MD5WithRSA |
EncryptType.MD5 |
SHA1WithRSA |
EncryptType.SHA1 |
SHA256WithRSA |
EncryptType.SHA256 |
SHA384WithRSA |
EncryptType.SHA384 |
SHA512 WithRSA |
EncryptType.SHA512 |
顺便提供一下Java实现RSA加密的方法:
加载公钥私钥(签名时候用的,前面忘了写了...):
实现加密解密(公钥加密,私钥解密):
测试方法:
使用运行Java代码加密,然后在C#中进行解密
使用Java签名数据,然后再C#中进行验证签名
注意过程中秘钥不要混淆,这里Java使用的PCKS8填充加密,所以在C#中生成的秘钥记得先转化为PCKS8填充模式的秘钥。