加密算法

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
77
78
79
80
81
82
83
84
85
86
87
public class Cryptography
    {
        private static readonly Byte[] IV =
        {
            131, 124, 213, 11, 241, 214, 201, 103,
            138, 225, 188, 216, 116, 247, 152, 145
        };
 
        private Byte[] aesKey =
        {
            121, 249, 165, 183, 172, 16, 18, 24,
            111, 129, 121, 13, 152, 114, 238, 114
        };
 
        private Boolean isDefaultKey;
 
        public String Key
        {
            get { return Convert.ToBase64String(this.aesKey); }
            set
            {
                this.aesKey = Convert.FromBase64String(value);
                this.isDefaultKey = false;
            }
        }
 
        public bool IsDefaultKey
        {
            get { return this.isDefaultKey; }
        }
 
        public Byte[] Encrypt(Byte[] plainData)
        {
            using (var aesProvider = new AesCryptoServiceProvider())
            {
                using (var stream = new MemoryStream())
                {
                    using (var cryptoStream = new CryptoStream(
                        stream,
                        aesProvider.CreateEncryptor(this.aesKey, IV),
                        CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(plainData, 0, plainData.Length);
                    }
                    var encryptMessageBytes = stream.ToArray();
                    var bts = new Byte[IV.Length + encryptMessageBytes.Length];
                    Array.Copy(IV, 0, bts, 0, IV.Length);
                    Array.Copy(encryptMessageBytes, 0, bts, IV.Length, encryptMessageBytes.Length);
                    return bts;
                }
            }
        }
 
        public Byte[] Decrypt(Byte[] encryptionData)
        {
            using (var aesProvider = new AesCryptoServiceProvider())
            {
                using (var stream = new MemoryStream())
                {
                    var iv = new Byte[16];
                    Array.Copy(encryptionData, 0, iv, 0, iv.Length);
                    using (var cryptoStream = new CryptoStream(
                        stream,
                        aesProvider.CreateDecryptor(this.aesKey, iv),
                        CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(encryptionData, IV.Length, encryptionData.Length - IV.Length);
                    }
                    return stream.ToArray();
                }
            }
        }
 
        public String EncryptString(String plainString)
        {
            var buffer = Encoding.UTF8.GetBytes(plainString);
            var encryptMessageBytes = this.Encrypt(buffer);
            return Convert.ToBase64String(encryptMessageBytes);
        }
 
        public String DecryptString(String encryptedString)
        {
            var buffer = Convert.FromBase64String(encryptedString);
            var decryptMessageBytes = this.Decrypt(buffer);
            return Encoding.UTF8.GetString(decryptMessageBytes);
        }
    }

  

posted @   云霄宇霁  阅读(166)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示