【问题标题】:Decrypting AES in Objective C在 Objective C 中解密 AES
【发布时间】:2015-08-21 12:17:03
【问题描述】:

我是加密新手

问题:

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

目标:

将java解密方法翻译成Objective C(使用密钥解密Objective C中的字符串)

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

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

【问题讨论】:

  • 您需要提供示例输入和输出以及模式、填充类型(如果有)和 iv(如果有 CBC 模式和任何)。将这些输入的十六进制副本添加到问题中。如果其中一些是未知的,还提供加密库的链接。许多加密库都有内部默认值,而且许多也不提供有关这些的信息。
  • Java getInstance 方法应该提供所有必要的信息,而不是依赖默认值。例如:“AES/CBC/PKCS5Padding (128)”、“AES/ECB/NoPadding (128)”或其他组合。使用“AES”规范,我猜想:ECB 模式(非常糟糕的选择)、PKCS5Padding 以及根据需要填充的基于提供的密钥空值的密钥长度。请参阅Class Cipher docs。
  • 用您的 Objective-C 代码更新您的问题,以便人们指出您的问题。
  • @zaph 你的第二条评论解决了我的问题。 “AES/CBC/PKCS5Padding (128)”。谢谢^^。

标签: objective-c encryption cryptography commoncrypto rncryptor


【解决方案1】:

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

我猜想使用“AES”规范:ECB 模式(非常糟糕的选择)、PKCS5Padding 以及基于提供的密钥空值填充的密钥长度。

请参阅Class Cipher docs。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多