• 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);
            }


        }

    }

    魔由心生,有万境纵横,无一道清静,无量寿佛!
  • 相关阅读:
    java 大数据比较两个list集合的差值
    service手动回滚
    mycat分库分表demo
    mysql集群搭建之读写分离
    Python 代码运行速度慢?用PyPy模块让你的速度起飞!
    大新闻!Python 之父重新出山,加入微软开发部
    附实战代码|告别OS模块,体验Python文件操作新姿势!
    Python九个最佳IDE集成开发环境,你用过吗?
    五个阶段让你成为Python专家,你确定不看看吗?
    制作交互式数据可视化图表,只需要一个Python库就能实现!
  • 原文地址:https://www.cnblogs.com/qihuan/p/4205616.html
Copyright © 2020-2023  润新知