Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在目标C中解密AES_Objective C_Encryption_Cryptography_Commoncrypto_Rncryptor - Fatal编程技术网

Objective c 在目标C中解密AES

Objective c 在目标C中解密AES,objective-c,encryption,cryptography,commoncrypto,rncryptor,Objective C,Encryption,Cryptography,Commoncrypto,Rncryptor,我是加密新手 问题: 我得到了一组加密字符串,我需要解密它们以显示给移动客户端用户。对于android,它可以很好地解密,我使用下面的方法“解密”。对于iOS,我在将此java方法转换为Objective C时遇到了很多困难。我尝试使用NSData+CommonCrypto、RNCryptor。它们都将返回一些解密的数据,但是当将解密的数据转换为字符串时,它将始终为零 目标: 将java解密方法转换为目标C(使用秘密密钥解密目标C中的字符串) 任何建议、评论、意见和伪代码都将不胜感激。谢谢 An

我是加密新手

问题:

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

目标:

将java解密方法转换为目标C(使用秘密密钥解密目标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;
    }
}

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

对于“AES”规范,我会猜测:ECB模式(非常糟糕的选择)、PKCS5Padding,以及根据需要填充的基于提供的密钥null的密钥长度


请参阅文档。

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