2013-05-06 249 views
2

我们使用在.NET框架中实现的AESManaged算法对PDF进行加密。我使用在here中解释的示例来实现C#代码来加密文件。现在我需要使用iPhone应用程序解密该文件(这是要求)。所以我使用this代码来做到这一点,但通过返回错误解密失败。使用.Net Framework进行AES文件加密并使用IOS进行解密

'错误域= CommonCryptoErrorDomain代码= -4304 “解码错误” 的UserInfo = {0x127356c0 = NSLocalizedFailureReason输入数据没有 解码或正确解密,NSLocalizedDescription =解码错误'

可不可以有一个人帮助我解决这个问题。

我们使用12345678作为加密密钥。

+0

那么它返回哪个错误? – 2013-05-06 11:56:20

+0

它说'错误域= CommonCryptoErrorDomain代码= -4304“解码错误”UserInfo = 0x127356c0 {NSLocalizedFailureReason =输入数据没有正确解码或解密,NSLocalizedDescription =解码错误' – nath 2013-05-06 12:17:12

+0

@ganuke不要张贴重要信息作为评论。请编辑您的问题并添加错误。 – 2013-05-06 12:47:54

回答

0

最可能的问题是从密码导出实际密钥(12345678不能直接用AES密钥 - 它只有8个字节)。

0

技术上这应该工作,虽然我从来没有测试过它,两种方法都使用相同的专门格式。

使用我的已验证加密example加密。

//use your secret data you want to encrypt instead. 
String secretMessage = "Message"; 

var rnCryptorHeader = new Byte[]{ 
          2, //RNCryptor Format version 2 
          0 //RNCryptor Uses password 
         }; 

//encryptedString is base64 encoded 
var encryptedString = AESThenHMAC.SimpleEncryptWithPassword(secretMessage, 
                  password:"1234567891011",  
                  nonSecretPayload:rnCryptorHeader); 

然后解密使用RNCryptorNSData+Base64为IOS

//This is the encrypted data passed from .net 
NSString *encryptedString = @"AgE8C9E7gsfyOAmSotIOgyLQ0O6mdcuMXXjN/iZa3azym4KVWZAkfykIP6mqMt/qkpfftdB3XQhMkoxtQEM+rA0iHxOvZiNlmA2KJtg6BOnmlg=="; 

NSData *encryptedData = [NSData dataFromBase64String: encryptedString]; 
NSError *error; 
NSData *decryptedData = [RNDecryptor decryptData:encryptedData 
            withPassword:@"1234567891011" 
              error:&error]; 
NSString *secretMessage = [[[NSString alloc] initWithData:decryptedData 
               encoding:NSUTF8StringEncoding] autorelease]; 

既然你不处理字符串,并直接处理的字节数,只是删除Base64和utf8编码/从这个objective-解码c例子和链接的c#例子,一旦你确定这是工作。

相关问题