繁体   English   中英

目标c。128加密.net aes

[英]objective c aes 128 encryption for .net 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);
                }
            }
        }
    }

错误是:

指数数组的边界之外。

它发生在

cs.FlushFinalBlock();

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

0suql40BUGiDoFA4SdXJAA ==

这来自我的.Net加密:

unNWQfm9RaU / HgKlDNEmoXZaTzsuBoTNsA2UvDKZhc4 =

PS对于AES 128的iPhone加密,这是我从以下代码获得的代码:

.Net和iPhone之间的AES互操作性?

查看AES在MSDN上保存文档安全文章并向下滚动到标题为“使用AES类”的部分,“图15使用AES”有一个很好的简单加密/解密示例。

PS注意在某些块密码(如AES)模式(如CBC)中使用的填充,当不同的系统相互通信时,这些可能会很麻烦,因为填充/块大小可能因系统而异...看到填充乐趣

编辑:刚发现这个小宝石...... 简单的2路加密换c-sharp

您可以在此处找到适用于iPhone和.NET的现成示例

一般来说,密码算法是通用的,应该可以在不同的语言中工作,只需要确保两种算法(即在.NET和iPhone中):

  • 完全使用以相同方式编码的相同密钥进行存储/传输(通常为base64)
  • 具有完全相同的参数,包括填充模式,操作模式(例如CBC / ECB)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM