de2bd2f9
“wangming”
项目初始化
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
using NCC.Dependency;
using System;
using System.Buffers.Text;
using System.IO;
using System.Runtime.CompilerServices;
using System.Security.Cryptography;
using System.Text;
namespace NCC.DataEncryption
{
/// <summary>
/// AES 加解密
/// </summary>
[SuppressSniffer]
public class AESEncryption
{
/// <summary>
/// 加密
/// </summary>
/// <param name="text">加密文本</param>
/// <param name="skey">密钥</param>
/// <returns></returns>
public static string Encrypt(string text, string skey)
{
var encryptKey = Encoding.UTF8.GetBytes(skey);
using var aesAlg = Aes.Create();
using var encryptor = aesAlg.CreateEncryptor(encryptKey, aesAlg.IV);
using var msEncrypt = new MemoryStream();
using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write, true))
using (var swEncrypt = new StreamWriter(csEncrypt, leaveOpen: true))
{
swEncrypt.Write(text);
}
var iv = aesAlg.IV;
var dataLength = iv.Length + (int)msEncrypt.Length;
var decryptedContent = msEncrypt.GetBuffer();
var base64Length = Base64.GetMaxEncodedToUtf8Length(dataLength);
var result = new byte[base64Length];
Unsafe.CopyBlock(ref result[0], ref iv[0], (uint)iv.Length);
Unsafe.CopyBlock(ref result[iv.Length], ref decryptedContent[0], (uint)msEncrypt.Length);
Base64.EncodeToUtf8InPlace(result, dataLength, out base64Length);
return Encoding.ASCII.GetString(result.AsSpan()[..base64Length]);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="hash">加密后字符串</param>
/// <param name="skey">密钥</param>
/// <returns></returns>
public static string Decrypt(string hash, string skey)
{
var fullCipher = Convert.FromBase64String(hash);
var iv = new byte[16];
var cipher = new byte[fullCipher.Length - iv.Length];
Unsafe.CopyBlock(ref iv[0], ref fullCipher[0], (uint)iv.Length);
Unsafe.CopyBlock(ref cipher[0], ref fullCipher[iv.Length], (uint)(fullCipher.Length - iv.Length));
var decryptKey = Encoding.UTF8.GetBytes(skey);
using var aesAlg = Aes.Create();
using var decryptor = aesAlg.CreateDecryptor(decryptKey, iv);
using var msDecrypt = new MemoryStream(cipher);
using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
using var srDecrypt = new StreamReader(csDecrypt);
return srDecrypt.ReadToEnd();
}
}
}
|