先上代码,注意输出格式

1 /// <summary> 2 /// AES 加密 输出hex格式 3 /// </summary> 4 /// <param name="str">明文(待加密)</param> 5 /// <param name="key">秘钥</param> 6 /// <param name="iv">向量</param> 7 /// <returns>加密后的字符串</returns> 8 public static string AesEncrypt(string str, string key, string iv) 9 { 10 if (string.IsNullOrEmpty(str)) return null; 11 Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str); 12 13 RijndaelManaged rm = new RijndaelManaged 14 { 15 Key = Encoding.UTF8.GetBytes(key), 16 IV = Encoding.UTF8.GetBytes(iv), 17 Mode = CipherMode.CBC, 18 Padding = PaddingMode.PKCS7 //加密什么格式对应改为就行,基本的话应该为PKCS7 19 }; 20 21 ICryptoTransform cTransform = rm.CreateEncryptor(); 22 Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 23 24 //return Convert.ToBase64String(resultArray, 0, resultArray.Length);//返回Base64 25 return ByteArrayToHexString(resultArray); 26 } 27 28 /// <summary> 29 /// AES解密 30 /// </summary> 31 /// <param name="str">需要解密的字符串</param> 32 /// <param name="key">32位密钥</param> 33 /// <param name="iv">向量(一定要问问对面要用什么向量)</param> 34 /// <returns>解密后的字符串</returns> 35 public static string Decrypt(string str, string key, string iv) 36 { 37 byte[] keyArray = Encoding.UTF8.GetBytes(key); 38 byte[] toEncryptArray = Convert.FromBase64String(str); 39 var rijndael = new RijndaelManaged 40 { 41 Key = keyArray, 42 Mode = CipherMode.CBC, 43 Padding = PaddingMode.PKCS7, 44 IV = Encoding.UTF8.GetBytes(iv) 45 }; 46 ICryptoTransform cTransform = rijndael.CreateDecryptor(); 47 byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 48 return Encoding.UTF8.GetString(resultArray); 49 } 50 51 /// <summary> 52 /// 将一个byte数组转换成一个格式化的16进制字符串 53 /// </summary> 54 /// <param name="data">byte数组</param> 55 /// <returns>格式化的16进制字符串</returns> 56 public static string ByteArrayToHexString(byte[] data) 57 { 58 StringBuilder sb = new StringBuilder(data.Length * 3); 59 foreach (byte b in data) 60 { 61 sb.Append(Convert.ToString(b, 16).PadLeft(2, '0')); 62 } 63 return sb.ToString().ToUpper(); 64 } 65 66 /// <summary> 67 /// 讲16进制字符串转换成byte数组 68 /// </summary> 69 /// <param name="hexString">16进制字符串</param> 70 /// <returns></returns> 71 public static byte[] HexStringToByteArray(string hexString) 72 { 73 var byteArray = new byte[hexString.Length / 2]; 74 for (var x = 0; x < byteArray.Length; x++) 75 { 76 var i = Convert.ToInt32(hexString.Substring(x * 2, 2), 16); 77 byteArray[x] = (byte)i; 78 } 79 return byteArray; 80 }
带偏移的

1 /// <summary> 2 /// AES加密 3 /// </summary> 4 /// <param name="text">加密字符</param> 5 /// <param name="password">加密的密码</param> 6 /// <param name="iv">密钥</param> 7 /// <returns></returns> 8 public string AESEncrypt(string data, string key, string iv, int num) 9 { 10 RijndaelManaged rijndaelCipher = new RijndaelManaged 11 { 12 Mode = CipherMode.CBC, 13 Padding = PaddingMode.PKCS7, 14 KeySize = 128, 15 BlockSize = 128, 16 Key = Encoding.UTF8.GetBytes(key), 17 IV = Encoding.UTF8.GetBytes(iv) 18 }; 19 20 ICryptoTransform transform = rijndaelCipher.CreateEncryptor(); 21 byte[] plainText = Encoding.UTF8.GetBytes(data); 22 byte[] cipherBytes = transform.TransformFinalBlock(plainText, 0, plainText.Length); 23 24 string a = Convert.ToBase64String(cipherBytes); 25 string b = ReplaceA(a.TrimEnd('=')); 26 return shiftToFront(b, num); 27 28 } 29 30 /// <summary> 31 /// AES解密 32 /// </summary> 33 /// <param name="text"></param> 34 /// <param name="password"></param> 35 /// <param name="iv"></param> 36 /// <returns></returns> 37 public string AESDecrypt(string data, string key, string iv, int num) 38 { 39 RijndaelManaged rijndaelCipher = new RijndaelManaged 40 { 41 Mode = CipherMode.CBC, 42 Padding = PaddingMode.PKCS7, 43 KeySize = 128, 44 BlockSize = 128, 45 Key = Encoding.UTF8.GetBytes(key), 46 IV = Encoding.UTF8.GetBytes(iv) 47 }; 48 data = shiftToBack(ReplaceB(data), num); 49 byte[] encryptedData = null; 50 try 51 { 52 encryptedData = Convert.FromBase64String(data); 53 } 54 catch(Exception ex) 55 { 56 try 57 { 58 data += "="; 59 encryptedData = Convert.FromBase64String(data); 60 } 61 catch 62 { 63 try 64 { 65 data += "="; 66 encryptedData = Convert.FromBase64String(data); 67 } 68 catch 69 { 70 data += "="; 71 encryptedData = Convert.FromBase64String(data); 72 } 73 } 74 } 75 76 ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); 77 byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length); 78 79 return Encoding.UTF8.GetString(plainText); 80 } 81 82 private static String shiftToBack(String ret, int num) 83 { 84 if ((num < 1) || (ret == null)) 85 return ret; 86 87 return ret.Substring(num) + ret.Substring(0, num); 88 } 89 90 private static String shiftToFront(String ret, int num) 91 { 92 if ((num < 1) || (ret == null)) 93 return ret; 94 95 int index = ret.Length - num; 96 if (index < 1) 97 return ret; 98 99 return ret.Substring(index) + ret.Substring(0, index); 100 } 101 102 public string ReplaceA(string s) 103 { 104 return s.Replace('+', '-').Replace('/', '_'); 105 } 106 107 public string ReplaceB(string s) 108 { 109 return s.Replace('-', '+').Replace('_', '/'); 110 }