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

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

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

    Rsamain代码

    package rsa;

    import java.math.BigInteger;
    import java.security.KeyFactory;
    import java.security.PrivateKey;
    import java.security.PublicKey;
    import java.security.spec.RSAPrivateKeySpec;
    import java.security.spec.RSAPublicKeySpec;

    import javax.crypto.Cipher;

    import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
    import com.sun.org.apache.xml.internal.security.utils.Base64;


    /**
     * @author qh
     * Jan 6, 2015
     */
    public class RSAMain {

        private static String module = "5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=";
        private static String exponentString = "AQAB";
        private static String delement = "vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=";
        private static String encryptString = "Vx/dGjS1YWKRubsoDgiShiwLgqyNE2z/eM65U7HZx+RogwaiZimNBxjuOS6acEhKZx66cMYEAd1fc6oewbEvDIfP44GaN9dCjKE/BkkQlwEg6aTO5q+yqy+nEGe1kvLY9EyXS/Kv1LDh3e/2xAk5FNj8Zp6oU2kq4ewL8kK/ai4=";
        /**
         * @param args
         */
        public static void main(String[] args) {
            byte[] en = encrypt();
            System.out.println(Base64.encode(en));
            byte[] enTest = null;
            try {
                enTest = Base64.decode(encryptString);
            } catch (Base64DecodingException e) {
                e.printStackTrace();
            }
            System.out.println(enTest.length);
            System.out.println(en.length);
            System.out.println(new String(Dencrypt(en)));
            System.out.println(new String(Dencrypt(enTest)));
        }

        public static byte[] encrypt() {
            try {
                byte[] modulusBytes = Base64.decode(module);
                byte[] exponentBytes = Base64.decode(exponentString);
                BigInteger modulus = new BigInteger(1, modulusBytes);
                BigInteger exponent = new BigInteger(1, exponentBytes);

                RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
                KeyFactory fact = KeyFactory.getInstance("RSA");
                PublicKey pubKey = fact.generatePublic(rsaPubKey);

                Cipher cipher = Cipher.getInstance("RSA");
                cipher.init(Cipher.ENCRYPT_MODE, pubKey);

                byte[] cipherData = cipher.doFinal(new String("chenhailong").getBytes());
                return cipherData;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;

        }

        public static byte[] Dencrypt(byte[] encrypted) {
            try {
                byte[] expBytes = Base64.decode(delement);
                byte[] modBytes = Base64.decode(module);

                BigInteger modules = new BigInteger(1, modBytes);
                BigInteger exponent = new BigInteger(1, expBytes);

                KeyFactory factory = KeyFactory.getInstance("RSA");
                Cipher cipher = Cipher.getInstance("RSA");

                RSAPrivateKeySpec privSpec = new RSAPrivateKeySpec(modules, exponent);
                PrivateKey privKey = factory.generatePrivate(privSpec);
                cipher.init(Cipher.DECRYPT_MODE, privKey);
                byte[] decrypted = cipher.doFinal(encrypted);
                return decrypted;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    C#代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Security.Cryptography;

    namespace RSA
    {
        class Program
        {
            static void Main(string[] args)
            {
                string de  = "iBILuPJFgPMxgpbgN3F2JjD6XjcqRSApjVVbvBBEBDV21Pjj7lTrfhEjSVnJX/MVoZrmX0lxsvoXTMvvVwVF7K7W5hs7Qo+aMN96yWke7wiLEM9M4pPz60A/KSckskiona67tXcqOLXb8N18TKaNCKHv0Ce+GyEKK5+MT7e1vao=";
                //string encrypt = RSAEncrypt("", "chenhailong");
                byte[] encrypt = RSAEncrypt("chenhailong");
                //string name = RSADecrypt(encrypt);
                string name = RSADecrypt(Convert.FromBase64String(de));
                Console.WriteLine(encrypt.Length);
                Console.WriteLine(Convert.ToBase64String(encrypt));
                Console.WriteLine(name);
                Console.ReadKey();
            }
            /// <summary>
            /// RSA encrypt
            /// </summary>
            /// <param name="publickey"></param>
            /// <param name="content"></param>
            /// <returns></returns>
            public static byte[] RSAEncrypt(string content)
            {
                string publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                byte[] cipherbytes;
                rsa.FromXmlString(publickey);
                cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);

                //return Convert.ToBase64String(cipherbytes);
                return cipherbytes;
            }

            /// <summary>
            /// RSA decrypt
            /// </summary>
            /// <param name="privatekey"></param>
            /// <param name="content"></param>
            /// <returns></returns>
            public static string RSADecrypt(byte[] content)
            {
                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>";
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                byte[] cipherbytes;
                rsa.FromXmlString(privatekey);
                cipherbytes = rsa.Decrypt(content, false);

                return Encoding.UTF8.GetString(cipherbytes);
            }


        }

    }

    魔由心生,有万境纵横,无一道清静,无量寿佛!
  • 相关阅读:
    84. Largest Rectangle in Histogram (Solution 2)
    84. Largest Rectangle in Histogram (Solution 1)
    73. Set Matrix Zeroes
    【JavaScript】Symbol 静态方法
    【JavaScript】Date
    【JavaScript】Math
    725. Split Linked List in Parts把链表分成长度不超过1的若干部分
    791. Custom Sort String字符串保持字母一样,位置可以变
    508. Most Frequent Subtree Sum 最频繁的子树和
    762. Prime Number of Set Bits in Binary Representation二进制中有质数个1的数量
  • 原文地址:https://www.cnblogs.com/qihuan/p/4205616.html
Copyright © 2011-2022 走看看