• c# Aes加解密


    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    namespace ConsoleApp1
    {
        internal class Program
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="args"></param>
            private static void Main(string[] args)
            {
                string IVString = "";//IV
                string key = "IE7XG5ORF7EA4JC5";//key
                string encrypt = "3duwmKQ5ED4FRz3UtSN2zMvrLOPEiGn9Fwj2oEJngww=";
                string decrypt = "3001004";
                //加密
                string encryptValue = AesEncrypt(decrypt, key, IVString);
                Console.WriteLine(encryptValue);
                Console.WriteLine(encryptValue.Equals(encrypt));
                Console.WriteLine("");
                //解密
                string decryptValue = AesDecrypt(encryptValue, key, IVString);
                Console.WriteLine(decryptValue);
                Console.WriteLine(decryptValue.Equals(decrypt));
                Console.Read();
            }
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="str"></param>
            /// <param name="key"></param>
            /// <param name="IVString"></param>
            /// <returns></returns>
            public static string AesEncrypt(string str, string key, string IVString)
            {
                Encoding encoder = Encoding.UTF8;
                byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
                RijndaelManaged rm = new RijndaelManaged
                {
                    Key = encoder.GetBytes(key),
                    Mode = CipherMode.CBC,
                    Padding = PaddingMode.PKCS7,
                    IV = encoder.GetBytes(IVString),
                };
                ICryptoTransform cTransform = rm.CreateEncryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                return ToBCDStringLower(resultArray);
            }
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="str"></param>
            /// <param name="key"></param>
            /// <param name="IVString"></param>
            /// <returns></returns>
            public static string AesDecrypt(string str, string key, string IVString)
            {
                Encoding encoder = Encoding.UTF8;
                using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
                {
                    aes.Key = encoder.GetBytes(key);
                    aes.IV = encoder.GetBytes(IVString);
                    var enc = aes.CreateDecryptor(aes.Key, aes.IV);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, enc, CryptoStreamMode.Write))
                        {
                            var bts = FromBCDString(str);
                            cs.Write(bts, 0, bts.Length);
                        }
                        return encoder.GetString(ms.ToArray());
                    }
                }
            }
            public static byte[] FromBCDString(string buffer)
            {
                if (buffer == null) return null;
                int start = 0;
                int count = buffer.Length;
                bool inCase = false;
                byte cur = 0;
                int dataEnd = start + count;
                List<byte> lst = new List<byte>(count / 2);
                while (start < dataEnd)
                {
                    byte num = (byte)buffer[start++];
                    if (num == ' ' || num == ' ' || num == ' ' || num == ' ')
                    {
                        if (inCase)
                        {
                            lst.Add((byte)(cur / 16));
                            inCase = false;
                        }
                        continue;
                    }
                    byte tmp = 0;
                    if (num >= '0' && num <= '9')
                        tmp = (byte)(num - '0');
                    else if (num >= 'a' && num <= 'f')
                        tmp = (byte)(num - 'a' + 10);
                    else if (num >= 'A' && num <= 'F')
                        tmp = (byte)(num - 'A' + 10);
                    else
                        throw new ArgumentException("需要传入一个正确的BCD字符串,BCD字符串中只能包含 0-9 A-F a-f 和空格,回车 制表符!");
                    if (!inCase)
                    {
                        cur = (byte)(tmp * 16);
                        inCase = true;
                    }
                    else
                    {
                        cur += tmp;
                        inCase = false;
                        lst.Add(cur);
                    }
                }
                if (inCase)
                {
                    lst.Add((byte)(cur / 16));
                    inCase = false;
                }
                return lst.ToArray();
            }
            public static string ToBCDStringLower(byte[] buffer)
            {
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < buffer.Length; i++)
                {
                    sb.Append(buffer[i].ToString("x2"));
                }
                return sb.ToString();//result;
            }
        }
    }
  • 相关阅读:
    Minikube体验
    基于Vue、Bootstrap的Tab形式的进度展示
    Python 网络请求模块 urllib 、requests
    SRE学习笔记:分布式共识系统、Paxos协议
    ReactNative: 使用对话框组件AlertIOS组件
    ReactNative: 使用AsyncStorage异步存储类
    ReactNative: 使用网页组件WebView组件
    ReactNative: 使用标签栏组件TabBarIOS组件
    ReactNative: 使用像素密度类PixelRatio进行适配
    ReactNative: 使用尺寸类Dimensions获取屏幕尺寸
  • 原文地址:https://www.cnblogs.com/94cool/p/10892983.html
Copyright © 2020-2023  润新知