今天调查了C# RSA和Java RSA,网上很多人说,C#加密或者java加密 ,Java不能解密或者C#不能解密

但是我尝试了一下,发现是可以的,下面就是我尝试的代码,如果您有什么问题,我想看看,他们为什么不能互通?

  1. package rsa;
  2. import java.math.BigInteger;
  3. import java.security.KeyFactory;
  4. import java.security.PrivateKey;
  5. import java.security.PublicKey;
  6. import java.security.spec.RSAPrivateKeySpec;
  7. import java.security.spec.RSAPublicKeySpec;
  8. import javax.crypto.Cipher;
  9. import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
  10. import com.sun.org.apache.xml.internal.security.utils.Base64;
  11. /**
  12. * @author cnchenhl
  13. * Jul 8, 2011
  14. */
  15. public class RSAMain {
  16. private static String module = "5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=";
  17. private static String exponentString = "AQAB";
  18. private static String delement = "vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=";
  19. private static String encryptString = "Vx/dGjS1YWKRubsoDgiShiwLgqyNE2z/eM65U7HZx+RogwaiZimNBxjuOS6acEhKZx66cMYEAd1fc6oewbEvDIfP44GaN9dCjKE/BkkQlwEg6aTO5q+yqy+nEGe1kvLY9EyXS/Kv1LDh3e/2xAk5FNj8Zp6oU2kq4ewL8kK/ai4=";
  20. /**
  21. * @param args
  22. */
  23. public static void main(String[] args) {
  24. byte[] en = encrypt();
  25. System.out.println(Base64.encode(en));
  26. byte[] enTest = null;
  27. try {
  28. enTest = Base64.decode(encryptString);
  29. } catch (Base64DecodingException e) {
  30. e.printStackTrace();
  31. }
  32. System.out.println(enTest.length);
  33. System.out.println(en.length);
  34. System.out.println(new String(Dencrypt(en)));
  35. System.out.println(new String(Dencrypt(enTest)));
  36. }
  37. public static byte[] encrypt() {
  38. try {
  39. byte[] modulusBytes = Base64.decode(module);
  40. byte[] exponentBytes = Base64.decode(exponentString);
  41. BigInteger modulus = new BigInteger(1, modulusBytes);
  42. BigInteger exponent = new BigInteger(1, exponentBytes);
  43. RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
  44. KeyFactory fact = KeyFactory.getInstance("RSA");
  45. PublicKey pubKey = fact.generatePublic(rsaPubKey);
  46. Cipher cipher = Cipher.getInstance("RSA");
  47. cipher.init(Cipher.ENCRYPT_MODE, pubKey);
  48. byte[] cipherData = cipher.doFinal(new String("chenhailong").getBytes());
  49. return cipherData;
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. return null;
  54. }
  55. public static byte[] Dencrypt(byte[] encrypted) {
  56. try {
  57. byte[] expBytes = Base64.decode(delement);
  58. byte[] modBytes = Base64.decode(module);
  59. BigInteger modules = new BigInteger(1, modBytes);
  60. BigInteger exponent = new BigInteger(1, expBytes);
  61. KeyFactory factory = KeyFactory.getInstance("RSA");
  62. Cipher cipher = Cipher.getInstance("RSA");
  63. RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, exponent);
  64. PrivateKey privKey = factory.generatePrivate(privSpec);
  65. cipher.init(Cipher.DECRYPT_MODE, privKey);
  66. byte[] decrypted = cipher.doFinal(encrypted);
  67. return decrypted;
  68. } catch (Exception e) {
  69. e.printStackTrace();
  70. }
  71. return null;
  72. }
  73. }
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Security.Cryptography;
  6. namespace RSA
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. string de  = "iBILuPJFgPMxgpbgN3F2JjD6XjcqRSApjVVbvBBEBDV21Pjj7lTrfhEjSVnJX/MVoZrmX0lxsvoXTMvvVwVF7K7W5hs7Qo+aMN96yWke7wiLEM9M4pPz60A/KSckskiona67tXcqOLXb8N18TKaNCKHv0Ce+GyEKK5+MT7e1vao=";
  13. //string encrypt = RSAEncrypt("", "chenhailong");
  14. byte[] encrypt = RSAEncrypt("chenhailong");
  15. //string name = RSADecrypt(encrypt);
  16. string name = RSADecrypt(Convert.FromBase64String(de));
  17. Console.WriteLine(encrypt.Length);
  18. Console.WriteLine(Convert.ToBase64String(encrypt));
  19. Console.WriteLine(name);
  20. Console.ReadKey();
  21. }
  22. /// <summary>
  23. /// RSA encrypt
  24. /// </summary>
  25. /// <param name="publickey"></param>
  26. /// <param name="content"></param>
  27. /// <returns></returns>
  28. public static byte[] RSAEncrypt(string content)
  29. {
  30. string publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
  31. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  32. byte[] cipherbytes;
  33. rsa.FromXmlString(publickey);
  34. cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
  35. //return Convert.ToBase64String(cipherbytes);
  36. return cipherbytes;
  37. }
  38. /// <summary>
  39. /// RSA decrypt
  40. /// </summary>
  41. /// <param name="privatekey"></param>
  42. /// <param name="content"></param>
  43. /// <returns></returns>
  44. public static string RSADecrypt(byte[] content)
  45. {
  46. string privatekey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
  47. RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
  48. byte[] cipherbytes;
  49. rsa.FromXmlString(privatekey);
  50. cipherbytes = rsa.Decrypt(content, false);
  51. return Encoding.UTF8.GetString(cipherbytes);
  52. }
  53. }
  54. }

有什么问题 请给我留言

下面是Key的互通代码

  1. private byte[] removeMSZero(byte[] data) {
  2. byte[] data1;
  3. int len = data.length;
  4. if (data[0] == 0) {
  5. data1 = new byte[data.length - 1];
  6. System.arraycopy(data, 1, data1, 0, len - 1);
  7. } else
  8. data1 = data;
  9. return data1;
  10. }

C# RSA和Java RSA互通的更多相关文章

  1. RSA算法 Android JAVA C#互通

    RSA算法属非对称加密算法,在实际使用中,往往客户端使用公钥进行加密传递敏感数据,服务端server使用私钥进行解密,这样防止中间人从网络获取敏感数据的明文. Android端主要代码如下: pack ...

  2. C# 与 Java Rsa加密与解密互通

    Rsa 加密标准的制定已经过去了十多年了. 这两天在看rsa 加密的文章,基本上都是在说 .net 与 java 之间的 rsa加密是不能互通的.因为项目有用到,所以花了点时间对rsa加密做了一点点了 ...

  3. RSA密钥,JAVA与.NET之间转换

    最近在做银联的一个接口,用到RSA签名,悲剧来了,.net用的RSA密钥格式和JAVA用的不一样 .net为XML格式 <RSAKeyValue><Modulus>53Knuj ...

  4. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  5. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)

    MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...

  6. JAVA RSA非对称加密详解[转载]

    一.概述1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现2.java6支持RSA算法3.RSA算法可以用于数据加密和数字签名4.RSA算法相对于DES/AES等对称加密算 ...

  7. java RSA 加签验签【转】

    引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加签验签 package com.testdemo.co ...

  8. C#-java RSA加密解密

    using Org.BouncyCastle.Math; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Securi ...

  9. java rsa 解密报:javax.crypto.BadPaddingException: Decryption error

    Exception in thread "main" javax.crypto.BadPaddingException: Decryption error    at sun.se ...

随机推荐

  1. JAVA 锁

    JAVA 锁 锁的概念 Java中的锁是控制资源访问的一种方式.它弥补了synchronized的可操作性不强的不足. Java的锁都实现了Lock接口.Lock结构定义了锁的基本操作. 函数 解释 ...

  2. 怎样为EXCEL2010添加下拉列表

    注意,下面是Excel2010的步骤和截图,其他版本的Excel类似.   首先用鼠标左键点击你要添加下拉列表的单元格. 如果你只想部分区域有下拉列表,也可以选择部分区域. 下面图片是选择的整个列都是 ...

  3. VS 2013 EFSQLITE

    在 vs 2013 上用 1.NuGet程序包来获取,它也会自动下载EF6的包 :system.Data.sqlite 他会自动下载 其它几个需要的包. 2.在Sqlite官网上下载对应的版本:htt ...

  4. Fisher information matrix笔记

    在看FK论文时,fisher information matrix是必须理解的. 从维基百科查阅到,Fisher information matrix是用利用最大似然函数估计来计算方差矩阵. 来源于: ...

  5. Android的主要组件

    (一)Activity(活动) 作用:提供可视化用户界面 只能通过setContentView(View)来显示指定组件 View组件是所有UI控件.容器控件的基类,View组件就是android应用 ...

  6. Objective-C开发图书推荐

    日本Objective-C圣经级教材:Objective-C编程全解(第3版) 作      者 [日] 荻原刚志 著:唐璐,翟俊杰 译 出 版 社 人民邮电出版社 出版时间 2015-01-01 版 ...

  7. python用法笔记(数组(list、touple、dict)、字符串)

    1.产生n个全为1的数组a=[1]*n2.字符数字转化int('12')float('12.5')str(123.45)ASCII码转为相应的字符:chr(97)字符转化为相应的ASCII码:ord( ...

  8. Java基础 —— DOM

    DOM:文档对象模型(Document Object Model) 定义: 文档:标记型文档:html,xml 对象:将文档或文档中的标签等内容都封装到对象中 模型:只要是标记型文档都通用 将html ...

  9. 第三百四十五天 how can I 坚持

    最烦这个阶段了,飘忽不定,或许这种感觉未来会很值得回味. 我为什么会那么烦,是因为错过而悔恨,还是..其实我还是很在乎的,好想一切都随缘. 让我讲struts.springmvc,可是什么都不会. 我 ...

  10. 【MySQL】查看MySQL配置文件路径及相关配置

    (1)关于配置文件路径 有时候,我发现虽然尝试修改了配置文件的一些变量,但是并没有生效.后来才发现原来是因为修改的文件并非MySQL服务器读取的配置文件. 如果不清楚MySQL当前使用的配置文件路径, ...