在Objective C中解密AES

时间:2015-06-06 16:51:54

标签: objective-c encryption cryptography commoncrypto rncryptor

我是加密新手

问题:

我获得了一组加密字符串,我需要解密它们以向移动客户端用户显示。对于android,它解密很好,我使用以下方法"解密"。对于iOS,我在将此java方法转换为Objective C时遇到了很多麻烦。我尝试过使用NSData + CommonCrypto,RNCryptor。它们都将返回一些解密数据,但是当将解密数据转换为字符串时,它将始终为零。

目标:

将java decrypt方法转换为Objective C(使用secrete密钥解密Objective C中的字符串)

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

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;
    }
}

1 个答案:

答案 0 :(得分:2)

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

使用“AES”规范,我猜:ECB模式(非常糟糕的选择),PKCS5Padding,以及根据需要填充的密钥null填充的密钥长度。

请参阅Class Cipher文档。