我在理解这里发生了什么时遇到了一些麻烦。我是加密领域的新手,并试图在通过 HTTP(以 JSON 字符串发送)传输用户名和密码之前对其进行加密,并在另一端对其进行解密。
我有一个类作为 AES 的简单实现(使用硬编码密钥/iv):
public class SimpleAES
{
private byte[] key = { 32, 128, 16, 11, 28, 36, 45, 15, 214, 184, 17, 244, 27, 142, 252, 119, 111, 84, 125, 244, 123, 93, 126, 39, 44, 76, 87, 118, 231, 136, 43, 109 };
private byte[] vector = { 246, 164, 231, 211, 32, 8, 64, 128, 211, 221, 132, 242, 122, 123, 129, 254 };
private ICryptoTransform encryptor, decryptor;
private UTF8Encoding encoder;
public SimpleAES()
{
//return;
RijndaelManaged rm = new RijndaelManaged();
encryptor = rm.CreateEncryptor(key, vector);
decryptor = rm.CreateDecryptor(key, vector);
encoder = new UTF8Encoding();
}
public string Encrypt(string unencrypted)
{
//return unencrypted;
return Convert.ToBase64String(Encrypt(encoder.GetBytes(unencrypted)));
}
public string Decrypt(string encrypted)
{
//return encrypted;
return encoder.GetString(Decrypt(Convert.FromBase64String(encrypted)));
}
public byte[] Encrypt(byte[] buffer)
{
return Transform(buffer, encryptor);
}
public byte[] Decrypt(byte[] buffer)
{
return Transform(buffer, decryptor);
}
protected byte[] Transform(byte[] buffer, ICryptoTransform transform)
{
MemoryStream stream = new MemoryStream();
using( CryptoStream cs = new CryptoStream(stream, transform, CryptoStreamMode.Write) )
{
cs.Write(buffer, 0, buffer.Length);
}
return stream.ToArray();
}
}
这会产生正确的加密。SimpleAES在 ASP.NET Core Web API 上的每次加密之间创建一个新对象,什么都不做,并且值保持完全相同。
有谁知道为什么这会在 Xamarin.iOS 上以这种方式表现?也许是垃圾收集问题?代码中是否存在特定于 Xamarin.iOS 的问题?我只是不知所措,不想使用这个解决方案。
尚方宝剑之说
相关分类