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(); }