所以我终于在使用相同加密的.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加密,这是我从以下代码获得的代码:
答案 0 :(得分:0)
查看AES Keeping your documents secure article on MSDN并向下滚动到标题为“使用AES类”的部分,“图15使用AES”有一个很好的简单加密/解密示例。
P.S。请注意在某些块密码(如AES)模式(如CBC)中使用的填充,当不同系统相互通信时,这些可能会很麻烦,因为填充/块大小可能因系统而异;请参阅padding fun
编辑:刚发现这个小宝石...... simple-2-way-encryption-for-c-sharp
答案 1 :(得分:0)
您可以找到适用于iPhone和.NET here
的现成样本一般来说,密码算法是通用的,只要你需要确保两种算法(即在.NET和iPhone中),它们应该适用于不同的语言: