2013-05-06 82 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#例子,一旦你確定這是工作。

相關問題