【发布时间】:2021-01-02 02:14:18
【问题描述】:
我正在使用这篇博文尝试在 asp.net core 3.1 中进行加密和解密。 https://tudip.com/blog-post/how-to-securely-transfer-web-api-data-in-asp-net-core/
它展示了如何使用中间件加密和解密每个请求和响应
我要加密的 JSON 字符串是 = "{"pageViews":37,"subscriberCount":2}"
private static Aes GetEncryptionAlgorithm()
{
Aes aes = Aes.Create();
aes.Key = Convert.FromBase64String("73kczzrPtnn5GXxQtOI6m4AewK34F4IkT/yaeYZxr+M=");
aes.IV = Convert.FromBase64String("b8LAfmzY8WxGNrZeTye4hw==");
return aes;
}
private static CryptoStream EncryptStream(Stream responseStream)
{
Aes aes = GetEncryptionAlgorithm();
CryptoStream base64EncodedStream = new CryptoStream(responseStream, new ToBase64Transform(), CryptoStreamMode.Write);
CryptoStream cryptoStream = new CryptoStream(base64EncodedStream, aes.CreateEncryptor(aes.Key, aes.IV), CryptoStreamMode.Write);
return cryptoStream;
}
string responseBody = new StreamReader(memStream).ReadToEnd();
responseBody = "ueArUlJZD2e+KaC6I/fvp1GdG0lXAVWIXJ0MPkG9"; //加密字符串。
//尝试解密
private static Stream DecryptStream(Stream cipherStream)
{
Aes aes = GetEncryptionAlgorithm();
CryptoStream base64DecodedStream = new CryptoStream(cipherStream, new FromBase64Transform(FromBase64TransformMode.IgnoreWhiteSpaces), CryptoStreamMode.Read);
CryptoStream decryptedStream = new CryptoStream(base64DecodedStream, aes.CreateDecryptor(aes.Key, aes.IV), CryptoStreamMode.Read);
return decryptedStream;
}
static async Task Main(string[] args)
{
string text2 = "ueArUlJZD2e+KaC6I/fvp1GdG0lXAVWIXJ0MPkG9";
MemoryStream ms = new MemoryStream();
var streamWriter = new StreamWriter(ms);
await streamWriter.WriteAsync(text2);
streamWriter.Flush();
ms.Position = 0;
var decypted = DecryptStream(ms);
StreamReader reader = new StreamReader(decypted);
string text = await reader.ReadToEndAsync();
Console.ReadLine();
}
//在reader.ReadToEndAsync()处出现异常“输入数据不是完整块”
还有一个问题 在客户端,我收到的加密字符串更短。
var httpResponseMessage = await httpclient.SendAsync(request, cancellationToken);
var test = await httpResponseMessage.Content.ReadAsStreamAsync();
StreamReader reader = new StreamReader(test);
string text = reader.ReadToEnd(); // encrypted response "ueArUlJZD2e+KaC6I/fvp1GdG0lXAVWIXJ0M"
客户端收到的加密数据比服务器加密字符串短。
服务器端加密字符串 = "ueArUlJZD2e+KaC6I/fvp1GdG0lXAVWIXJ0MPkG9"; 加密字符串客户端 = "ueArUlJZD2e+KaC6I/fvp1GdG0lXAVWIXJ0M"'
【问题讨论】:
标签: c# asp.net asp.net-core encryption .net-core