Java代码
加密 CBC(key + iv)
public static String encryptAES(String content, String key)
throws InvalidKeyException, NoSuchAlgorithmException,
NoSuchPaddingException, UnsupportedEncodingException,
InvalidAlgorithmParameterException, IllegalBlockSizeException, BadPaddingException {
byte[] byteContent = content.getBytes("UTF-8");
// 注意,为了能与 iOS 统一
// 这里的 key 不可以使用 KeyGenerator、SecureRandom、SecretKey 生成
byte[] enCodeFormat = key.getBytes();
SecretKeySpec secretKeySpec = new SecretKeySpec(enCodeFormat, "AES");
byte[] initParam = IV_STRING.getBytes();
IvParameterSpec ivParameterSpec = new IvParameterSpec(initParam);
// 指定加密的算法、工作模式和填充方式
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] encryptedBytes = cipher.doFinal(byteContent);
// 同样对加密后数据进行 base64 编码
Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(encryptedBytes);
}
iOS
考虑使用CryptoSwift
关于AES-128、AES-192、AES-256
CryptoSwift 会根据密钥的长度自动选择对应的加密算法(AES128, AES192, AES256)
AES-128 = 16 bytes
AES-192 = 24 bytes
AES-256 = 32 bytes
eg:
let aes = AES(key: key.bytes, blockMode: CBC(iv: iv.bytes))
key字符串的位数为16、24、32时,自动对应AES-128、AES-192、AES-256
网友评论