Java和.net加密解密互通RSA
来源:互联网 发布:c 语言教程 编辑:程序博客网 时间:2024/04/26 07:52
Java代码:
/* * 公钥加密,私钥解密 * */@SuppressWarnings("deprecation")private static void EncRSA() throws UnsupportedEncodingException{//公钥String publickey="<RSAKeyValue><Modulus>lAZkkM9+ety4jYO7EK+UCDw7b2jCukkTSsoSGzjmVeL/x5xwmLezQKmQKd8231SVQ8Kiy576NA28d3/km8P8s9NNYGlTm0/TxjBcF4DhwlLp1cjqJHDEkJF9KLsDHkddCXAdC9CIvQhn5aMtZ0AlDTVB2vcZdga4DYaNyzwmZ9k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";PublicKey pubKey = RsaHelper.decodePublicKeyFromXml(publickey);//私钥String privatekey = "<RSAKeyValue><Modulus>lAZkkM9+ety4jYO7EK+UCDw7b2jCukkTSsoSGzjmVeL/x5xwmLezQKmQKd8231SVQ8Kiy576NA28d3/km8P8s9NNYGlTm0/TxjBcF4DhwlLp1cjqJHDEkJF9KLsDHkddCXAdC9CIvQhn5aMtZ0AlDTVB2vcZdga4DYaNyzwmZ9k=</Modulus><Exponent>AQAB</Exponent><P>zJn0qTCSaaPdMm00HwCvmuRTP7i+Hahxbuq9fQVEQq+FI4/Brv6Ir3bPIBklr6q5G4GLUjGNr9l2t7DuwP7AKQ==</P><Q>uTX42WUoxeOvGVZFKfpgwMRjycaLkY4RpTUk/CMaEhURgDq/AxwEFEGDG3iZcp2x6e24W65mOmuwJ+ejqgMQ==</Q><DP>OmYPMWONxt1gu43z/I1jkiBtqph+m1SC3BfgchjYvPgAVoAn1l0Mgpi00gKbgSKHp1Q4ggNm37SAcDnuS+Pq0Q==</DP><DQ>MjAU6dwGq3EiPqxo+5IUa8gL/l5l7aBg2bLH/ecJJoM9BdFld1M9K7wA6g3JDwz6bBh1z6o3m3cZNEzDxx1h0Q==</DQ><InverseQ>HlgXgA1f2xyh5Ap8WYZV+DzP5J0wazVYKhgmky0QEYNYvW42sLgq1pwjovhbUVRUYwzceQgyk6b78ptYXh1BZw==</InverseQ><D>EEKPg3S3gQmD4E+rGc8fpLPxF3DbixkB3IJL8N+UNbUEwcmGeNAdCapWorLZVTj2WIYl2dYxx8wGet36n72soW1vrVJ5YwhJN0bMGP0tAzmU1qrSMwt17jdqKpCLVfBxHJMjMhL6qaSx4LBN4e690LcOG/44Kfm0CViIdyEE6IE=</D></RSAKeyValue>";//将C#端私钥转换成Java端私钥PrivateKey prvKey=RsaHelper.decodePrivateKeyFromXml(privatekey); String dataStr = "jiaye"; byte[] dataByteArray = dataStr.getBytes("utf-8"); System.out.println("data的Base64表示:" + Base64Helper.encode(dataByteArray)); System.out.println((new Date()).toLocaleString() + ": 加密中。。。"); // 加密 byte[] encryptedDataByteArray = RsaHelper.encryptData( dataByteArray, pubKey); System.out.println("encryptedData的Base64表示:" + Base64Helper.encode(encryptedDataByteArray)); //解密C#加密好的密文: System.out.println((new Date()).toLocaleString() + ": C#加密好的密文解密中。。。"); // 解密 String prvstr="BuVtIEeEkFAnqIES9a1hwe2EY9leETykIRUxhdZAqcJxh97MOk4qHuTnYswTrlX4D+25sPaVnEPfCo5T9+OAhQyKUjitEMDXttP6Hb0W8ya69T3WfUes1HCFLjv7FSgPYLVFpJfvR/z3t+z93CF8pgtbnsIY8ZWpxpt//LmiFNs="; byte[] b= Base64Helper.decode(prvstr); byte[] dec = RsaHelper.decryptData(b, prvKey);// System.out.println(new String(dec, "utf-8")); System.out.println((new Date()).toLocaleString() + ": java解密中。。。"); // 解密 // byte[] byte[] decryptedDataByteArray = RsaHelper.decryptData( encryptedDataByteArray, prvKey); System.out.println(new String(decryptedDataByteArray, "utf-8")); System.out.println((new Date()).toLocaleString() + ": java签名中。。。");// 签名 byte[] signDataByteArray = RsaHelper.signData(dataByteArray, prvKey); System.out.println("signData的Base64表示:" + Base64Helper.encode(signDataByteArray)); // 验签 //C#生成的签名验证: String signc="b87FdJsdVTBkNOoP4kl375mzinY9bcwDZAHOvvw/0sHT7pFF/m1nDnB9UL5hHZ4rNIsV75EIHS43RL4+XgKXx6+xQFbIqIwc7CZ0DYMrKJ7oDCUVZH/BogvhYKpaht4u0vge8Twst12xMGQBH/zy5Hvx1AOJ+xNMMBrPnSRKavE="; System.out.println((new Date()).toLocaleString() + ": C#生成的签名验签中。。。"); byte[] signcbyte= Base64Helper.decode(signc); boolean flagc = RsaHelper.verifySign(dataByteArray, signcbyte, pubKey); System.out.println("验签结果:" + flagc); System.out.println((new Date()).toLocaleString() + ": java验签中。。。"); boolean isMatch = RsaHelper.verifySign(dataByteArray, signDataByteArray, pubKey); System.out.println("验签结果:" + isMatch);}
.Net代码:
public static class RSAHelper { private const int MAXDECRYPTSIZE = 128; /// <summary> /// RSA解密 /// </summary> /// <param name="encryptData">经过Base64编码的密文</param> /// <param name="privateKey">私钥</param> /// <returns>RSA解密后的数据</returns> public static string decrypt(string encryptData, string privateKey) { string decryptData = ""; try { RSACryptoServiceProvider provider = new RSACryptoServiceProvider(); provider.FromXmlString(privateKey); byte[] bEncrypt = Convert.FromBase64String(encryptData); int length = bEncrypt.Length; int offset = 0; string cache; int i = 0; while (length - offset > 0) { if (length - offset > MAXDECRYPTSIZE) { cache = Encoding.UTF8.GetString(provider.Decrypt(getSplit(bEncrypt, offset, MAXDECRYPTSIZE), false)); } else { cache = Encoding.UTF8.GetString(provider.Decrypt(getSplit(bEncrypt, offset, length - offset), false)); } decryptData += cache; i++; offset = i * MAXDECRYPTSIZE; } } catch (Exception e) { throw e; } return decryptData; } /// <summary> /// 截取字节数组部分字节 /// </summary> /// <param name="input"></param> /// <param name="offset">起始偏移位</param> /// <param name="length">截取长度</param> /// <returns></returns> private static byte[] getSplit(byte[] input, int offset, int length) { byte[] output = new byte[length]; for (int i = offset; i < offset + length; i++) { output[i - offset] = input[i]; } return output; } /// <summary> /// 加密 /// </summary> /// <param name="original">原文</param> /// <param name="publicKey">公钥</param> /// <returns></returns> public static string encrypt(string original, string publicKey) { string creatingext; try { var enc = new UTF8Encoding(); byte[] bytes = enc.GetBytes(original); var crypt = new RSACryptoServiceProvider(); crypt.FromXmlString(publicKey); bytes = crypt.Encrypt(bytes, false); creatingext = Convert.ToBase64String(bytes); } catch (Exception ex) { throw ex; } return creatingext; } }
0 0
- Java和.net加密解密互通RSA
- AES加密解密(互通.NET和JAVA)
- Java和.net加密解密互通DES
- AES+RSA加密解密(js和java互通)
- java和php实现RSA加密互通
- php和java之间rsa加密互通
- Android平台和java平台 DES、3DES、RSA加密解密互通程序及其不能互通的原因
- .NET和java的RSA互通,仅此而已
- NET和java的RSA互通,仅此而已
- php 和 java RSA 对称加密互通的问题
- .NET 与 Java DES 加密/解密 互通 方法
- Android 与 .net 互通的RSA加密
- Android 与 .net 互通的RSA加密
- Python 和 java的 RSA加密解密
- java实现RSA加密和解密
- java RSA和AES加密解密工具
- java RSA加密解密
- Java RSA加密解密
- C# 缓存技术(转)
- 10行代码绕过亿赛通加密
- Eclipse配置PyDev插件
- 谈谈关于内存对齐与补齐
- accept
- Java和.net加密解密互通RSA
- 关键词 搜索
- oracle创建表空间、删除表空间、修改表空间名称
- 自定义View
- linux mysql安装与使用
- oracle创建用户、删除用户,修改用户密码
- oracle创建视图
- docker网络配置方法总结
- 留个空位