我最终找到了一种更易于理解的方法,用同样的加密方式实现.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();
以下是“25f9e794323b453885f5181f1b624d0b”密钥和“heythere”信息的加密结果:
0suql40BUGiDoFA4SdXJAA==
这是使用我的.NET加密得到的:
unNWQfm9RaU/HgKlDNEmoXZaTzsuBoTNsA2UvDKZhc4=
PS:对于AES 128的iPhone加密,我从以下链接中获得了代码:
KeySize = 256; BlockSize = 128; Mode = CipherMode.CBC; Padding = PaddingMode.PKCS7
)。 - Ameen