zoukankan      html  css  js  c++  java
  • 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();
            }
  • 相关阅读:
    前端发版后清理浏览器缓存处理
    CF235A 【LCM Challenge】
    CF39H 【Multiplication Table】
    CF171C 【A Piece of Cake】
    CF450A 【Jzzhu and Children】
    CF387B 【George and Round】
    火柴棒等式
    P1062 数列 题解
    P1045 麦森数
    (原创)最短路径那些事-1
  • 原文地址:https://www.cnblogs.com/wangjunguang/p/12027640.html
Copyright © 2011-2022 走看看