### 简要描述: - AES/加密模式 ECB / 填充 PKCS7Padding / 数据块 128 位。加密密钥使用开放平台分配的 AppSecret。 **假设cards为:** ``` [{"cardNo":"10001","cardPwd":"123456","expireTime":"2023-06-19 17:16:01"}] ``` **假设开放平台的 appSecret 为:** `00000000000000000000000000000000` ### .NET加密示例: ```csharp var encryptCards = AES.EncryptAes(cards, appSecret); //加密后的数据 encryptCards = "34APdvSJhWfr5wnzE4YzxAsI0gfI6pI/Njrj1UQMHJrZ8Dq9EWsDnln0pp08gn4KES4iQu9/f0Y8UMN4dGdSK67oi0Bc12/V8hrNxqoC3Lk="; public class AES { /// /// 获取Aes32位密钥 /// /// Aes密钥字符串 /// Aes32位密钥 static byte[] GetAesKey(string key) { if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key", "Aes密钥不能为空"); } if (key.Length != 32) { throw new ArgumentNullException("key", "Aes密钥长度必须是32个字符"); } return Encoding.UTF8.GetBytes(key); } /// /// Aes加密 /// /// 源字符串 /// aes密钥 /// 加密后的字符串 public static string EncryptAes(string source, string key) { try { using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider()) { aesProvider.Key = GetAesKey(key); aesProvider.Mode = CipherMode.ECB; aesProvider.Padding = PaddingMode.PKCS7; using (ICryptoTransform cryptoTransform = aesProvider.CreateEncryptor()) { byte[] inputBuffers = Encoding.UTF8.GetBytes(source); byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length); return Convert.ToBase64String(results, 0, results.Length); } } } catch (Exception e) { return string.Empty; } } } ``` ### Java示例 ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import java.security.Security; import java.util.Base64; public class Main { static { Security.addProvider(new BouncyCastleProvider()); } /** * AES/ECB/PKCS7Padding 加密 * * @param plainText 明文字符串 * @param secretKey 密钥(32 字符) * @return 加密后的 Base64 字符串 * @throws Exception 加密过程中可能抛出的异常 */ public static String encrypt(String plainText, String secretKey) throws Exception { if (secretKey.length() != 32) { throw new IllegalArgumentException("密钥长度必须为 32 个字符"); } byte[] keyBytes = secretKey.getBytes("UTF-8"); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); // 打印密钥信息 System.out.println("使用的密钥 (Base64): " + Base64.getEncoder().encodeToString(keyBytes)); System.out.println("密钥长度 (字节): " + keyBytes.length); // 创建加密实例,使用 AES/ECB/PKCS7Padding 模式 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding"); System.out.println("使用的加密提供者: " + cipher.getProvider()); // 初始化加密模式 cipher.init(Cipher.ENCRYPT_MODE, keySpec); // 执行加密并返回 Base64 编码结果 byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(encryptedBytes); } public static void main(String[] args) throws Exception { String plainText = "[{\"cardNo\":\"10001\",\"cardPwd\":\"123456\",\"expireTime\":\"2023-06-19 17:16:01\"}]"; String secretKey = "0a091b3aa4324435aab703142518a8f7"; String encrypted = encrypt(plainText, secretKey); System.out.println("最终加密结果: " + encrypted); } } ```