Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对.net aes的目标c aes 128加密_C#_Objective C_Base64_Aes - Fatal编程技术网

C# 针对.net aes的目标c aes 128加密

C# 针对.net aes的目标c aes 128加密,c#,objective-c,base64,aes,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

因此,我最终发现,在使用相同的加密为.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加密,这是我从中获得代码的地方:

查看并向下滚动到标题为“使用AES类”的部分,“图15使用AES”有一个很好且简单的加密/解密示例

请注意,在某些块密码(如AES)模式(如CBC)中使用的填充,当不同的系统相互交谈时,这些可能是一种痛苦,因为填充/块大小可能因系统而异。。。看


编辑:刚刚发现了这个小宝石

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

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

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

iPhone代码在哪里?您引用的问题没有它(问题中的链接指向空页)。我注意到的一件事是,您正在使用加密文本作为IV;这几乎肯定是错误的。而且,AES是Rijndael的“专用”版本。您需要确保设置了正确的密钥大小和填充(
KeySize=256;BlockSize=128;Mode=CipherMode.CBC;Padding=PaddingMode.PKCS7
)@gdubs:您的代码可能会让一些人感到惊讶。至少在一个正确的括号中完成它会有助于提高可读性。我没有看到任何Objective-C。为什么这个问题被标记为这样?错误是不可复制的。请提供一个正确的最小工作示例。这实际上是我试图用来加密的。解密是我遇到一些问题的地方,因为我做的和他做的不同。