C# 针对.net aes的目标c aes 128加密
因此,我最终发现,在使用相同的加密为.Net Wcf服务实现AES 128加密时,有些东西更容易理解。我现在的问题是,每当它尝试解密字符串时,它都会有一个步骤,执行FromBase64String转换,这将给我一个错误: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
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)
KeySize=256;BlockSize=128;Mode=CipherMode.CBC;Padding=PaddingMode.PKCS7
)@gdubs:您的代码可能会让一些人感到惊讶。至少在一个正确的括号中完成它会有助于提高可读性。我没有看到任何Objective-C。为什么这个问题被标记为这样?错误是不可复制的。请提供一个正确的最小工作示例。这实际上是我试图用来加密的。解密是我遇到一些问题的地方,因为我做的和他做的不同。