Java AES与iOS

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

你可能感兴趣的:(Java AES与iOS)