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 { /// /// AES 加解密 /// [SuppressSniffer] public class AESEncryption { /// /// 加密 /// /// 加密文本 /// 密钥 /// 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]); } /// /// 解密 /// /// 加密后字符串 /// 密钥 /// 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(); } } }