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
  • 相关阅读:
    C++17 filesystem文件系统
    简易版本vue的实现
    javaSE基础04
    javaSE基础03
    javaSE基础02
    JavaSE基础01
    Document对象和window对象
    进程和子进程及端口的常用命令
    vue分页组件二次封装---每页请求特定数据
    css图片垂直水平居中及放大(实现水平垂直居中的效果有哪些方法?)
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173292.html
Copyright © 2011-2022 走看看