在 Objective C 中解密 AES

Decrypting AES in Objective C

我是加密新手

问题:

我得到了一组加密字符串,我需要将它们解密以显示给移动客户端用户。对于 android,它解密很好,我正在使用以下方法 "decrypt"。对于 iOS,我在将此 java 方法转换为 Objective C 时遇到了很多麻烦。我曾尝试使用 NSData+CommonCrypto、RNCryptor。两者都会return一些解密数据,但是当解密数据转换为字符串时,它总是nil。

目标:

Translate the java decrypt method to Objective C(Decrypt a string in Objective C using a secret key)

任何建议、评论、意见、伪代码将不胜感激。谢谢

Android解密方法

public static String decrypt(String message){
    try {
        Cipher c = Cipher.getInstance("AES");
        SecretKeySpec key = new SecretKeySpec(secrKey.getBytes(), "AES");
        c.init(Cipher.DECRYPT_MODE, key);
        byte[] decordedValue = Base64.decode(message.getBytes(), Base64.DEFAULT);
        byte[] decValue = c.doFinal(decordedValue);
        String decryptedValue = new String(decValue);
        String decoded = new String(Base64.decode(decryptedValue, Base64.DEFAULT));
        return decoded;
    }catch(Exception e){
        return null;
    }
}

Java getInstance 方法应该提供所有必要的信息,而不是依赖默认值。例如:"AES/CBC/PKCS5Padding (128)"、"AES/ECB/NoPadding (128)" 或其他一些组合。

根据 "AES" 规范,我猜测:ECB 模式(非常糟糕的选择)、PKCS5Padding 和基于提供的密钥的密钥长度,根据需要进行空填充。

参见 Class Cipher 文档。