AES加密,C#和java相同

转载https://www.cnblogs.com/duanjt/p/11584427.html#commentform

以下为C#端,加密方式,aes加密中有key和iv。这个加密中没有添加iv可自行添加

1.通过加密后得到的byte[]数组,进行base64,或者16进制转化得到转化后得密文。

2

        /// <summary>
        /// 用种子获取密钥字节
        /// </summary>
        /// <param name="strKey">密钥种子</param>
        /// <param name="encoding">编码格式</param>
        /// <param name="nLen">密钥长度(一般为16,不清楚时不要随意动)</param>
        /// <returns></returns>
        public static byte[] GetKeyBySeed(string strKey, Encoding encoding, int nLen = 16)
        {
            byte[] bySeed = encoding.GetBytes(strKey);
            byte[] byKeyArray = null;
            using (var st = new SHA1CryptoServiceProvider())
            {
                using (var nd = new SHA1CryptoServiceProvider())
                {
                    var rd = nd.ComputeHash(st.ComputeHash(bySeed));
                    byKeyArray = rd.Take(nLen).ToArray();
                }
            }
            return byKeyArray;
        }

        /// <summary>
        ///  加密 参数:string
        /// </summary>
        /// <param name="strCon">加密内容</param>
        /// <param name="byteKey">密钥字节数组</param>
        /// <param name="strIv">向量(注意目前只研究支持16位长度)</param>
        /// <param name="encoding">编码方式</param>
        /// <returns>string:密文</returns>
        public static string Encrypt(string strCon, byte[] byteKey, Encoding encoding)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(strCon))
                {
                    return null;
                }

                byte[] byCon = encoding.GetBytes(strCon);
                var rm = new RijndaelManaged
                {                    
                    Key = byteKey,
                    Mode = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7
                };
                ICryptoTransform cTransform = rm.CreateEncryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(byCon, 0, byCon.Length);                
                return Program.ByteArrayToHexString(resultArray);
            }
            catch
            {
                return "";
            }
        }

        public static string Decrypt(string strCon, byte[] byteKey,Encoding encoding)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(strCon))
                {
                    return null;
                }

                byte[] byCon = HexStrToByte(strCon);
                var rm = new RijndaelManaged
                {
                    Key = byteKey,
                    Mode = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7
                };
                ICryptoTransform cTransform = rm.CreateDecryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(byCon, 0, byCon.Length);
                return encoding.GetString(resultArray);
            }
            catch(Exception ex)
            {
                return "";
            }
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="hexString"></param>
        /// <returns></returns>
        public static byte[] HexStrToByte(string hexString)
        {
            hexString = hexString.Replace(" ", "");
            if ((hexString.Length % 2) != 0)
                hexString += " ";
            byte[] returnBytes = new byte[hexString.Length / 2];
            for (int i = 0; i < returnBytes.Length; i++)
                returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
            return returnBytes;
        }

        /// <summary>
        /// 转化为16进制
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder(data.Length * 3);
            foreach (byte b in data)
            {
                sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
            }
            return sb.ToString().ToUpper();
        }

猜你喜欢

转载自www.cnblogs.com/wangjunguang/p/12027640.html