• 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
  • 相关阅读:
    使用AnsyncTask异步类从网络上下载图片
    fibonacci分治求法
    JavaScript
    JavaScript
    JavaScript
    JavaScript
    yarn安装vue后,报“文件名、目录名或卷标语法不正确。”
    VIM-Plug安装插件时,频繁更新失败,或报端口443被拒绝等
    Node.js Windows Binary二进制文件安装方法
    Linux常用命令
  • 原文地址:https://www.cnblogs.com/sdwdjzhy/p/4173292.html
Copyright © 2020-2023  润新知