一、Java的AES加密解密代码
1 import javax.crypto.Cipher; 2 import javax.crypto.spec.SecretKeySpec; 3 import java.nio.charset.StandardCharsets; 4 import java.util.Base64; 5 6 public class AesEncryptionUtil { 7 private static final String ALGORITHM = "AES/ECB/PKCS5Padding"; 8 private static final String SECRET_KEY = "b6bd4cf968a241e2"; 9 10 public static String encrypt(String plainText) throws Exception { 11 byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8); 12 SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 13 14 Cipher cipher = Cipher.getInstance(ALGORITHM); 15 cipher.init(Cipher.ENCRYPT_MODE, keySpec); 16 17 byte[] encrypted = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8)); 18 return Base64.getEncoder().encodeToString(encrypted); 19 } 20 public static String decrypt(String encryptedText) throws Exception { 21 byte[] keyBytes = SECRET_KEY.getBytes(StandardCharsets.UTF_8); 22 SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); 23 24 Cipher cipher = Cipher.getInstance(ALGORITHM); 25 cipher.init(Cipher.DECRYPT_MODE, keySpec); 26 27 byte[] decodedBytes = Base64.getDecoder().decode(encryptedText); 28 byte[] decrypted = cipher.doFinal(decodedBytes); 29 return new String(decrypted, StandardCharsets.UTF_8); 30 } 31 public static void main(String[] args) throws Exception { 32 String str = encrypt("abc"); 33 System.out.println(str); 34 String str1 = decrypt(str); 35 System.out.println(str1); 36 } 37 }
菜鸟工具上执行效果
二、C#加密解密代码
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace HelloWorldApplication { class HelloWorld { static void Main(string[] args) { /* Write C# code in this online editor and run it. */ string key="b6bd4cf968a241e2"; string enStr= AESEncrypt.Encrypt("abc",key); Console.WriteLine(enStr); string deStr= AESEncrypt.DecryptByAES(enStr,key); Console.WriteLine(deStr); Console.ReadKey(); } } public class AESEncrypt { /// <summary> /// 加密不带偏移量 /// </summary> /// <param name="input"></param> /// <param name="key"></param> /// <returns></returns> public static string Encrypt(string input, string key) { if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key)) { return input; } using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) { rijndaelManaged.Mode = CipherMode.ECB; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.FeedbackSize = 128; rijndaelManaged.Key = Encoding.UTF8.GetBytes(key); ICryptoTransform encryptor = rijndaelManaged.CreateEncryptor(rijndaelManaged.Key, rijndaelManaged.IV); using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(input); } byte[] bytes = msEncrypt.ToArray(); return Convert.ToBase64String(bytes); } } } } /// <summary> /// AES解密 /// </summary> /// <param name="input">密文字节数组</param> /// <returns>返回解密后的字符串</returns> public static string DecryptByAES(string input, string key) { if (string.IsNullOrWhiteSpace(input) || string.IsNullOrWhiteSpace(key)) { return input; } var buffer = Convert.FromBase64String(input); using (RijndaelManaged rijndaelManaged = new RijndaelManaged()) { rijndaelManaged.Mode = CipherMode.ECB; rijndaelManaged.Padding = PaddingMode.PKCS7; rijndaelManaged.FeedbackSize = 128; rijndaelManaged.Key = Encoding.UTF8.GetBytes(key); ICryptoTransform decryptor = rijndaelManaged.CreateDecryptor(rijndaelManaged.Key, rijndaelManaged.IV); using (MemoryStream msEncrypt = new MemoryStream(buffer)) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srEncrypt = new StreamReader(csEncrypt)) { return srEncrypt.ReadToEnd(); } } } } } } }
菜鸟工具执行效果:
三、注意事项
1.key位数:16位。
2.加密模式要对应,可以切换其他模式。Java:AES/ECB/PKCS5Padding,C#:CipherMode.ECB/PaddingMode.PKCS7
3.这里是一种没有偏移量的写法,有偏移量就加上偏移量。