### 简要描述:
- 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);
}
}
```