【问题标题】:Decrypt a file in iOS Objective-C encrypted using RijndaelManaged class解密使用 RijndaelManaged 类加密的 iOS Objective-C 中的文件
【发布时间】:2014-01-13 21:57:32
【问题描述】:

我正在使用以下代码使用 RijndaelManaged 类在 C# 中加密文件:

RijndaelManaged RMCrypto = new RijndaelManaged();

byte[] keyArray = UTF8Encoding.UTF8.GetBytes("**Random Passphrase**"); // 256-AES key             
RMCrypto.Key = keyArray;
RMCrypto.Mode = CipherMode.ECB;

FileStream fsCrypt = new FileStream(outputFile, FileMode.Create);

ICryptoTransform cTransform = RMCrypto.CreateEncryptor();
CryptoStream cs = new CryptoStream(fsCrypt, cTransform, CryptoStreamMode.Write);

FileStream fsIn = new FileStream(inputFile, FileMode.Open);

byte[] buffer = new byte[8 * 16384];
int len;
while ((len = fsIn.Read(buffer, 0, buffer.Length)) > 0)
{
    cs.Write(buffer, 0, len);
}

fsIn.Close();
cs.Close();
fsCrypt.Close();

如何在 iOS Objective-C 中解密同一个文件并使用它?

【问题讨论】:

    标签: c# objective-c encryption aes rijndael


    【解决方案1】:

    您应该能够使用 Apple 提供的 CommonCrypto 功能。这里有几个关于 SO 的答案,其中包含代码和几个 3rd 方项目,例如封装 CommonCrypto 的 RNCryptor,包括通过 CocoaPods 的可用性。

    需要匹配所有参数,例如密钥大小(128/192/256)、密钥、iv、数据、模式和填充。

    AES 是 Rijndael 的子集,只要块大小为 128 位,一般不会出现兼容性问题。

    请参阅我的 SO example code

    【讨论】:

    • 嘿 Zaph,我正在尝试您的示例和所有其他示例,共同点是它们都需要 IV 来解密数据,但是这里的代码不使用 IV 进行加密我们对 android 使用了相同的方法,它也没有使用 IV。我对如何为解密顺利提供必要的参数感到沮丧。
    • ECB 模式不需要 iv,但它提供的安全性较弱,如果可能的话,请使用 CBC 模式和 iv
    • 客户端没问题,但是在iOS中如何使用ECB模式呢?你能指点我一个样品吗?谢谢
    • 要使用 ECB 模式,请添加选项:kCCOptionECBMode 和 nil 的 iv。要了解 ECB 模式有多糟糕,请查看 WikiPedia article 中的企鹅图片。
    • @manishKungwani:我遇到了同样的问题,我不知道如何以及在我的代码中在哪里使用 iv,如果你能帮助我了解 ECB,还有一件事。
    猜你喜欢
    • 2011-08-15
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多