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 = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";//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 == '\r' || num == '\n' || num == '\t')
                {
                    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;
        }
    }
}

c# Aes加解密的更多相关文章

  1. DES,AeS加解密,MD5,SHA加密

    1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...

  2. c# Aes加解密和对象序列化

    aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...

  3. Java、C#双语版配套AES加解密示例

      这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...

  4. AES加解密算法Qt实现

    [声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...

  5. aes加解密 Illegal key size

    做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...

  6. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密

    前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...

  7. Aes加解密,php

    Aes类库 <?php namespace Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_metho ...

  8. cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  9. AES加解密程序的实现

    AES加解密程序的实现正常情况,用户不能访问sys.dbms_crypto,需要DBA授权:grant execute on dbms_crypto to crm;建立加解密的PKG_AES包:CRE ...

  10. 收银台数据库存储AES加解密

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合.缺点是密钥的传输 ...

随机推荐

  1. Python OpenCV 显示图片,图片分类

    def divide_image(path,g_path1,g_path0): img_lst = os.listdir(path) for i in img_lst: print('类别1,类别0' ...

  2. Rollup 配置 es6 环境

    前 为了可以使用新型的语法,顺便在兼容下老的浏览器,所以需要自己搭建个环境,目前我个人推崇使用 rollup,主要喜欢它的 tree-shake,打包出来的代码真的很简洁. 配置 rollup.con ...

  3. ant-design自定义FormItem--上传文件组件

    自定义上传组件,只需要在内部的值变化之后调用props中的onChange方法就可以托管在From组件中, 此外为了保证,初始化值发生变化后组件也发生变化,需要检测initialValue 变化,这是 ...

  4. HttpRuntime.Cache 与 HttpContext.Current.Cache

    1.HttpRuntime.Cache是应用程序级别的, 2.而HttpContext.Current.Cache是针对当前WEB上下文定义的. 3.这二个都是调用的同一个对象,不同的是:HttpRu ...

  5. java报错 pom.xml第一行报"org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project...

    https://www.cnblogs.com/appium/p/11168441.html 新建Maven项目时,每个pom文件第一行都报错. 一.问题分析 原因就是你的maven的配置文件不是最新 ...

  6. thinkphp 分页类 url 编码处理

    在做thinkphp分页的时候  thinkphp 中的分页 有一个小问题 就是 在有form 表单 搜索中文的时候,点击下一页的话 中文会被转换成编码. 如图: 最直接的方法就是 直接修改 thin ...

  7. aspx页面,后端通过Attributes.Add给textbox添加事件时,传参失效问题。

    测试一:------------------------------------------------------------------------------------------------ ...

  8. vue中通过WeixinJSBridge关闭微信公众号当前页面,返回微信公众号首页

    之前有个需求,点击菜单进入到微信公众号模块,然后点击返回的时候不知道到哪里去,后来觉得点返回的时候直接关闭页面,但是window.close()并不能关闭页面,然后经过查找资料,发现通过以下方法可以 ...

  9. ArrayList与LinkedList

    ArrayList与Linkedlist的增删改查问题以及集合选择问题 线程:安全:Vector 不安全:ArrayList,LinkedList 增删多:LinkedList 查询多:ArrayLi ...

  10. 双栈(Dual Stack)

    参考博客: 双栈数据结构: https://blog.csdn.net/hebtu666/article/details/83011115 https://blog.csdn.net/cainv89/ ...