2

我们使用 .NET 框架中实现的 AESManaged 算法加密 PDF。我使用此处解释的示例来实现 C# 代码来加密文件。现在我需要使用 iPhone 应用程序解密该文件。(这是要求)。因此,我使用代码来执行此操作,但解密失败并返回错误。

'错误域=CommonCryptoErrorDomain Code=-4304 "解码错误" UserInfo=0x127356c0 {NSLocalizedFailureReason=输入数据未正确解码或解密,NSLocalizedDescription=解码错误'

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

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

4

2 回答 2

0

最有可能的问题在于从密码中派生的实际密钥(12345678 不能直接作为 AES 密钥 - 它只有 8 个字节)。

于 2013-05-06T13:39:58.687 回答
0

从技术上讲,尽管我从未对其进行过测试,但这应该可以工作,两种方法都使用相同的 ad-hoc 格式。

使用我的认证加密示例进行加密。

//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];

由于您不是在处理字符串而是直接处理字节,因此只要您确定这是有效的,就从这个objective-c 示例和链接的c# 示例中删除Base64 和utf8 编码/解码。

于 2013-05-07T12:52:22.373 回答