c# - .net aes 的 objective c aes 128 加密

标签 c# objective-c base64 aes

因此,我终于发现在为具有相同加密的 .Net Wcf 服务实现 AES 128 加密时,我发现了一些不太稳定的东西。我现在的问题是,每当它尝试解密字符串时,它都会执行一个 FromBase64String 转换步骤,这会给我一个错误:

static public string DecryptString(string message, string key)
{
    string output = "";
    Rijndael aes = new RijndaelManaged();

    try
    {
        byte[] encrypted = Convert.FromBase64String(message);
        byte[] cipherText = GetCipherText(encrypted);

        aes.Key = Convert.FromBase64String(key);
        aes.Mode = CipherMode.CBC;

        aes.IV = GetIV(encrypted);

        using (MemoryStream ms = new MemoryStream())
        {
            using (ICryptoTransform decryptor = aes.CreateDecryptor())
            {
                using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Write))
                {
                    cs.Write(cipherText, 0, cipherText.Length);
                    cs.FlushFinalBlock();

                    byte[] decrypted = ms.ToArray();
                    output = Encoding.UTF8.GetString(decrypted);
                }
            }
        }
    }

错误是:

Index was outside the bounds of the array.

它发生在

cs.FlushFinalBlock();

这是它为消息“heythere”和 key “25f9e794323b453885f5181f1b624d0b”生成的加密

0suql40BUGiDoFA4SdXJAA==

这来 self 的 .Net 加密:

unNWQfm9RaU/HgKlDNEmoXZaTzsuBoTNsA2UvDKZhc4=

PS 对于 AES 128 的 iPhone 加密,这是我从中获取代码的地方:

AES interoperability between .Net and iPhone?

最佳答案

AES Keeping your documents secure article on MSDN并向下滚动到标题为“使用 AES 类”的部分,“图 15 使用 AES”有一个很好且简单的加密/解密示例。

附言请注意在某些 block 密码(如 AES)模式(如 CBC)中使用的填充,当不同系统相互通信时,这些可能会很痛苦,因为填充/ block 大小可能因一个系统而异......请参阅padding fun

编辑:刚发现这个小 gem ... simple-2-way-encryption-for-c-sharp

关于c# - .net aes 的 objective c aes 128 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639475/

相关文章:

iphone - NSDate 没有返回正确的日期

python - 如何在 Django 的 HTML 页面上显示 blob 图像?

c# - 解析图像数据 URI 的正则表达式

c# - SandcaSTLe 不生成私有(private)方法文档 (C#)

c# - foreach 循环无法转换但手动转换和 for 循环工作

objective-c - 未正确设置可变字典键

android - 在 Android 中解码 JSON base64 数据(来自 PHP 的 base64_encode)?

c# - 二进制转整数的字符串

c# - 在 C# 中使用 LINQ Distinct

objective-c - 使应用程序运行时每 60 秒发生一次方法