【问题标题】:AES file encryption with .Net Framework and decrypt it with IOS使用 .Net Framework 进行 AES 文件加密并使用 IOS 进行解密
【发布时间】:2013-04-30 04:10:09
【问题描述】:

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

'Error Domain=CommonCryptoErrorDomain Code=-4304 "解码错误" UserInfo=0x127356c0 {NSLocalizedFailureReason=输入数据没有 正确解码或解密,NSLocalizedDescription=Decode Error'

谁能帮我解决这个问题。

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

【问题讨论】:

  • 那么它返回哪个错误?
  • 它说'Error Domain=CommonCryptoErrorDomain Code=-4304 "Decode Error" UserInfo=0x127356c0 {NSLocalizedFailureReason=输入数据没有正确解码或解密,NSLocalizedDescription=Decode Error'
  • @ganuke 不要将重要信息作为评论发布。请编辑您的问题并添加错误。
  • 您不能使用12345678 作为加密密钥。 AES 采用 16、24 或 32 字节序列,但那是一个字符串。
  • 我找到了this 并成功地集成到我们的系统中。谢谢大家

标签: c# iphone objective-c encryption aes


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    使用我的认证加密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];
    

    由于您不处理字符串,而是直接处理字节,只要您确定这可以正常工作,只需从此 Objective-c 示例和链接的 c# 示例中删除 Base64 和 utf8 编码/解码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2021-11-04
      • 2014-01-14
      • 2020-06-16
      • 2021-04-27
      • 2014-09-14
      相关资源
      最近更新 更多