zoukankan      html  css  js  c++  java
  • C# RSA和Java RSA互通

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

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

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

     有什么问题 请给我留言

    下面是Key的互通代码

    Java代码  收藏代码
    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.   
    10.       return data1;  
    11.   }  
  • 相关阅读:
    search(13)- elastic4s-histograms:聚合直方图
    search(12)- elastic4s-聚合=桶+度量
    search(11)- elastic4s-模糊查询
    search(10)- elastic4s-multi_match:多字段全文搜索
    search(9)- elastic4s logback-appender
    search(8)- elastic4s-search-query模式
    search(7)- elastic4s-search-filter模式
    search(6)- elastic4s-CRUD
    search(5)- elastic4s-构建索引
    权限功能之(二)
  • 原文地址:https://www.cnblogs.com/gc2013/p/3764806.html
Copyright © 2011-2022 走看看