zoukankan      html  css  js  c++  java
  • 使用AES加密的帮助类

    在开发中经常使用加密/解密对一些内容进行处理,比如密码在存入数据库之前先经过加密处理等等,这里就把一个加密帮助类代码贴出来,供以后查找使用。

    这个帮助类主要功能是对字符串和字节数组进行加密解密处理。

    public class EncryptionHelper
        {
            //默认密钥向量 
            private static readonly byte[] DefaultKey = {0x12, 0x34, 0x56, 120, 0x90, 0xab, 0xcd, 0xef};
    
            /// <summary>
            ///     解密字节数组
            /// </summary>
            /// <param name="cipherBytes">密文字节数组</param>
            /// <param name="password">密钥</param>
            /// <returns>解密后字节数组</returns>
            public static byte[] DecryptBytes(byte[] cipherBytes, string password)
            {
                byte[] buffer;
                try
                {
                    using (Aes aes = new AesManaged())
                    {
                        //设置密钥及密钥向量
                        aes.Key = new Rfc2898DeriveBytes(password, DefaultKey).GetBytes(0x10);
                        aes.IV = aes.Key;
                        using (var memoryStream = new MemoryStream())
                        {
                            using (
                                var cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(),
                                    CryptoStreamMode.Write))
                            {
                                cryptoStream.Write(cipherBytes, 0, cipherBytes.Length);
                                cryptoStream.Flush();
                            }
                            //得到解密后的字节数组
                            buffer = memoryStream.ToArray();
                        }
                    }
                }
                catch
                {
                    buffer = null;
                }
                return buffer;
            }
    
            /// <summary>
            ///     解密字符串
            /// </summary>
            /// <param name="cipherText">密文</param>
            /// <param name="password">密钥</param>
            /// <returns>解密后字符串</returns>
            public static string DecryptString(string cipherText, string password)
            {
                byte[] decryptBytes = DecryptBytes(Convert.FromBase64String(cipherText), password);
                if (decryptBytes == null)
                {
                    return null;
                }
                return Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
            }
    
            /// <summary>
            ///     加密字节数组
            /// </summary>
            /// <param name="plainBytes">明文字节数组</param>
            /// <param name="password">密钥</param>
            /// <returns>加密后字节数组</returns>
            public static byte[] EncryptBytes(byte[] plainBytes, string password)
            {
                byte[] buffer;
                try
                {
                    using (Aes aes = new AesManaged())
                    {
                        //设置密钥及密钥向量
                        aes.Key = new Rfc2898DeriveBytes(password, DefaultKey).GetBytes(0x10);
                        aes.IV = aes.Key;
                        using (var memoryStream = new MemoryStream())
                        {
                            using (
                                var cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(),
                                    CryptoStreamMode.Write))
                            {
                                cryptoStream.Write(plainBytes, 0, plainBytes.Length);
                                cryptoStream.FlushFinalBlock();
                            }
                            //得到加密后的字节数组
                            buffer = memoryStream.ToArray();
                        }
                    }
                }
                catch
                {
                    buffer = null;
                }
                return buffer;
            }
    
            /// <summary>
            ///     加密字符串
            /// </summary>
            /// <param name="plainText">明文</param>
            /// <param name="password">密钥</param>
            /// <returns>加密后字符串</returns>
            public static string EncryptString(string plainText, string password)
            {
                byte[] cipherBytes = EncryptBytes(Encoding.UTF8.GetBytes(plainText), password);
                if (cipherBytes == null)
                {
                    return null;
                }
                return Convert.ToBase64String(cipherBytes);
            }
        }
  • 相关阅读:
    Codeforces Round #693 (Div. 3) G. Moving to the Capital (图,dp)
    Educational Codeforces Round 102 (Rated for Div. 2) B. String LCM (构造,思维)
    Hadoop离线计算——环境搭建(一)
    大数据项目开发进度(实时更新)
    【迭代式开发】v1架构设计文档——大数据开发实战项目(三)
    【迭代式开发】V1软件需求规格说明书——大数据开发实战项目(二)
    Flume安装——环境搭建(二)
    【中英双语】Spark官方文档解读(一)——Spark概述
    TortoiseSVN使用教程【多图超详细】——大数据开发实习day1
    【深度学习TPU+Keras+Tensorflow+EfficientNetB7】kaggle竞赛 使用TPU对104种花朵进行分类 第十八次尝试 99.9%准确率
  • 原文地址:https://www.cnblogs.com/candyzkn/p/3566252.html
Copyright © 2011-2022 走看看