zoukankan      html  css  js  c++  java
  • RSA 加解密

            #region RSA
            public static byte[] GetBytes(String num)
            {
                BigInteger n = new BigInteger(num, 10);
                String s = n.ToString(2);
                if (s.Length % 8 > 0)
                {
                    s = new String('0', 8 - s.Length % 8) + s;
                }
                byte[] data = new byte[s.Length / 8];
                String ocetstr;
                for (int i = 0; i < data.Length; i++)
                {
                    ocetstr = s.Substring(8 * i, 8);
                    data[i] = Convert.ToByte(ocetstr, 2);
                }
                return data;
            }
    
            /// <summary> 
            /// 字节数组转16进制字符串 
            /// </summary> 
            /// <param name="bytes"></param> 
            /// <returns></returns> 
            public static String ConvByteArrayToHex(byte[] data)
            {
                String s = "";
                for (int i = 0; i < data.Length; i++)
                {
                    s += Convert.ToString(data[i], 16);
                }
                return s.ToUpper();
            }
            public static string RSAEncrypt(string Modulus, string Exponent, string content)
            {
                var param = new RSAParameters();
                param.Exponent = GetBytes(Exponent);
                param.Modulus = GetBytes(Modulus);
                RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
                rsa.ImportParameters(param);
    
                int CellLength = new BigInteger(param.Modulus).bitCount() / 8;
    
                byte[] bInput = Encoding.UTF8.GetBytes(content);
    
    
                int MaxLength = CellLength - 11;
                int GroupLength = (int)Math.Ceiling(bInput.Length * 1.00 / MaxLength);
    
                byte[] cipherText = new byte[GroupLength * CellLength];
                for (int i = 0; i < GroupLength; i++)
                {
                    int len = MaxLength < bInput.Length - MaxLength * i ? MaxLength
                            : bInput.Length - MaxLength * i;
                    byte[] inByte = new byte[len];
                    Buffer.BlockCopy(bInput, MaxLength * i, inByte, 0, len);
    
                    byte[] temp = rsa.Encrypt(inByte, false);
                    Buffer.BlockCopy(temp, 0, cipherText, i * CellLength, CellLength);
                }
                //cipherText = rsa.Encrypt(bInput, false);
                //return Convert.ToBase64String(cipherText);
                //return toHex(cipherText);
                return BitConverter.ToString(cipherText).Replace("-", "");
    
            }
    
    
            #endregion
  • 相关阅读:
    请求转发和请求重定向的区别
    查看电脑连过的WiFi密码
    linux mysql不能远程登录
    map的遍历方法
    ________________springbootのMybatis
    ________________springbootのTest
    ________________springbootの自定义starter
    ________________springbootのAOP
    ________________springbootのjdbc、事物
    ________________初学springboot14
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173292.html
Copyright © 2011-2022 走看看