diff --git a/Falcon.Extend/AESCryptoService.cs b/Falcon.Extend/AESCryptoService.cs
new file mode 100644
index 0000000..78d330c
--- /dev/null
+++ b/Falcon.Extend/AESCryptoService.cs
@@ -0,0 +1,82 @@
+using System;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace Falcon.Extend
+{
+ ///
+ /// AES加密服务
+ ///
+ public class AESCryptoService:ICryptoService
+ {
+ ///
+ /// 用AES加密字符串
+ ///
+ /// 明文
+ /// 关键字
+ /// 密文
+ public string Encrypt(string content,string key) {
+ var encryptKey = GetDecryptKey(key);
+ 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))
+ using(var swEncrypt = new StreamWriter(csEncrypt)) {
+ swEncrypt.Write(content);
+ }
+ var iv = aesAlg.IV;
+ var decryptedContent = msEncrypt.ToArray();
+ var result = new byte[iv.Length + decryptedContent.Length];
+ Buffer.BlockCopy(iv,0,result,0,iv.Length);
+ Buffer.BlockCopy(decryptedContent,0,result,iv.Length,decryptedContent.Length);
+ return Convert.ToBase64String(result);
+ }
+ }
+ }
+ }
+ ///
+ /// AES解密
+ ///
+ /// 密文
+ /// 关键字
+ /// 明文
+ public string Decrypt(string content,string key) {
+ var fullCipher = Convert.FromBase64String(content);
+ var iv = new byte[16];
+ var cipher = new byte[fullCipher.Length - iv.Length];
+ Buffer.BlockCopy(fullCipher,0,iv,0,iv.Length);
+ Buffer.BlockCopy(fullCipher,iv.Length,cipher,0,fullCipher.Length - iv.Length);
+ var decryptKey = GetDecryptKey(key);
+ using(var aesAlg = Aes.Create()) {
+ using(var decryptor = aesAlg.CreateDecryptor(decryptKey,iv)) {
+ string result;
+ using(var msDecrypt = new MemoryStream(cipher)) {
+ using(var csDecrypt = new CryptoStream(msDecrypt,decryptor,CryptoStreamMode.Read)) {
+ using(var srDecrypt = new StreamReader(csDecrypt)) {
+ result = srDecrypt.ReadToEnd();
+ }
+ }
+ }
+ return result;
+ }
+ }
+ }
+
+ ///
+ /// 格式化加密key长度
+ ///
+ /// 加密用的key
+ /// 格式化长度
+ /// 加密key字节数组
+ protected byte[] GetDecryptKey(string key,int keyLength = 32) {
+ var buf = new byte[keyLength];
+ var ek = Encoding.UTF8.GetBytes(key);
+ var len = keyLength > ek.Length ? ek.Length : buf.Length;
+ for(var i = 0;i < len;i++) {
+ buf[i] = ek[i];
+ }
+ return buf;
+ }
+ }
+}
diff --git a/Falcon.Extend/ICryptoService.cs b/Falcon.Extend/ICryptoService.cs
new file mode 100644
index 0000000..ff4f7e9
--- /dev/null
+++ b/Falcon.Extend/ICryptoService.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Falcon.Extend
+{
+ ///
+ /// 数据加密解密接口
+ ///
+ public interface ICryptoService
+ {
+ ///
+ /// 使用指定的key加密内容
+ ///
+ /// 要加密的明文
+ /// 加密key
+ /// 加密后的密文
+ string Encrypt(string content,string key);
+ ///
+ /// 使用指定的key解密内容
+ ///
+ /// 要解密的密文
+ /// key
+ /// 解密后的明文
+ string Decrypt(string content,string key);
+ }
+}
diff --git a/Falcon.ExtendTests/AESCryptoServiceTests.cs b/Falcon.ExtendTests/AESCryptoServiceTests.cs
new file mode 100644
index 0000000..a0d3b84
--- /dev/null
+++ b/Falcon.ExtendTests/AESCryptoServiceTests.cs
@@ -0,0 +1,28 @@
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using Falcon.Extend;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Falcon.Extend.Tests
+{
+ [TestClass()]
+ public class AESCryptoServiceTests
+ {
+ [TestMethod()]
+ public void EncryptTest() {
+ ICryptoService service = new AESCryptoService();
+ var mw = new string[] { "abc","123","中文明文","中英文混编123abc","+-*/ _=-`~!@#$%^&*()" };
+ var keys = new string[] { Guid.NewGuid().ToString("N"),"123","0123456789012345678901234567890123456789" };
+ for(int i = 0;i < mw.Length;i++) {
+ for(int y = 0;y < keys.Length;y++) {
+ var mwn = mw[i];
+ var k = keys[y];
+ var miw = service.Encrypt(mwn,k);
+ var mwn1 = service.Decrypt(miw,k);
+ Assert.AreEqual(mwn,mwn1,$"明文有变化{k}_{mwn}{mwn1}");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file