Objective c ios 7中的Decrytion在使用aes时不起作用

Objective c ios 7中的Decrytion在使用aes时不起作用,objective-c,encryption,ios7,Objective C,Encryption,Ios7,在我的应用程序中,我从xml中获取数据,在xml中数据被加密,我需要解密接收到的nsstring UserName = @"QEjbHvzPjk+YuLDVPUJuEA=="; 我需要将这个nsstring解密为常规格式,我搜索并找到了aes,但它没有做任何更改 NSString* msg = [FBEncryptorAES decryptBase64String:UserName keyString:@

在我的应用程序中,我从xml中获取数据,在xml中数据被加密,我需要解密接收到的nsstring

 UserName = @"QEjbHvzPjk+YuLDVPUJuEA==";
我需要将这个nsstring解密为常规格式,我搜索并找到了aes,但它没有做任何更改

  NSString* msg = [FBEncryptorAES decryptBase64String:UserName
                                          keyString:@"01234567890abcdefghijklmnopqrstuvwxyz"];

if (msg)
{
    UserName = msg;

    NSLog(@"decrypted: %@", msg);
} else
{
    UserName = @"(failed to decrypt)";
}

如何解密上述nsstring,请提前感谢。

该字符串不仅是AES加密的,而且是Base64编码的。尾随的“==”是base64填充的典型形式。此外,AES加密生成数据字节,而不是ASCII字符,并且输出是块大小的倍数。Base64对加密结果进行编码是很常见的,因此它是ASCII,可以包含在XML中

对于iOS 7,NSData有几种Base64 API方法。也许你想要的是:

- (id)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options
例如:

NSString *userName = @"QEjbHvzPjk+YuLDVPUJuEA==";
NSData *data = [[NSData alloc] initWithBase64EncodedString:userName options:0];
NSLog(@"data: %@", data);
NSLog输出:
数据:

数据可能是AES加密的,它是块长度的倍数,如果是这样,您将需要密钥以及有关填充、模式和可能的iv的信息


请注意,
FBEncryptorAES
class方法
encryptedBase64String
不接受Base64输入,但解密密钥字符串是可疑的,并且由于方法和可能的iv,加密可能与此解密方法不匹配。因此,
FBEncryptorAES
类可能不是您所需要的。

您需要了解用于加密字符串。字符串看起来像基数64,因此可能需要对其进行解码(假设UTF-8,结果为“@HώO=Bn”)。我假设您的密钥是一个占位符(因为它对于AES密钥来说似乎太大了),所以我无法看到它是否会解密为有意义的值感谢您的响应,因为我尝试了您的建议,但生成的nsdata无法转换为原始形式,因为我尝试了“NSNONLOSYSISTRINGENCODING”,它的结果与字符串“QEjbHvzPjk+YuLDVPUJuEA==”的字符串类型相同,或者当我使用“NSUTF8StringEncoding”时,它返回(null)。如何获取服务器中的原始字符串。有两个步骤:1-将Base64字符串解码为数据。2-使用AES解密数据。第二步是关键,因为你需要知道键、填充、模式和iv。可能没有填充(不太可能)。这种模式可能是CBC需要静脉注射,或者ECB不需要静脉注射。你需要知道这些事情。只有钥匙是秘密。有些软件结合了所有这些东西,你需要阅读文档才能找到它们。有些软件,如php,不能正确地填充,使事情变得更加困难。我建议您获取这些信息并提供一个包含所有这些信息的示例;NSData*data=[[NSData alloc]initWithBase64EncodedString:用户名选项:0];NSLog(@“数据:%@”,数据);NSString*键=@“01234567890123456789012345678901”;NSData*明文=[data AES256DecryptWithKey:key];NSLog(@“明文:%@”,明文);我尝试了上面的编码,正如您在第1步中提到的,但它仍然是空的。如果您需要这样做,您必须确切地了解服务器是如何编码/加密数据的。