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;
}
}
}
- DES,AeS加解密,MD5,SHA加密
1.DES一共就有4个参数参与运作:明文.密文.密钥.向量.其中这4者的关系可以理解为: 密文=明文+密钥+向量: 明文=密文-密钥-向量: 为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复, ...
- c# Aes加解密和对象序列化
aes加解密 public class AesCryptto { private string key = "hjyf57468jhmuist"; private string i ...
- Java、C#双语版配套AES加解密示例
这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...
- AES加解密算法Qt实现
[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外 ...
- aes加解密 Illegal key size
做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前 ...
- C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密
前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...
- Aes加解密,php
Aes类库 <?php namespace Aes; class Aes { /** * var string $method 加解密方法,可通过openssl_get_cipher_metho ...
- cryptoJS AES 加解密简单使用
简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...
- AES加解密程序的实现
AES加解密程序的实现正常情况,用户不能访问sys.dbms_crypto,需要DBA授权:grant execute on dbms_crypto to crm;建立加解密的PKG_AES包:CRE ...
- 收银台数据库存储AES加解密
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合.缺点是密钥的传输 ...
随机推荐
- ubutun16.04 安装编译glog日志库
glog 是一个 C++ 日志库,它提供 C++ 流式风格的 API.在安装 glog 之前需要先安装 gflags,这样 glog 就可以使用 gflags 去解析命令行参数(可以参见gflags ...
- 循环节 + 矩阵快速幂 - HDU 4291 A Short problem
A Short problem Problem's Link Mean: 给定一个n,求:g(g(g(n))) % 1000000007 其中:g(n) = 3g(n - 1) + g(n - 2), ...
- tkmybatis VS mybatisplus
本文是简单对比了以下官网上的内容 文章目录 TkMybatis Vs MybatisPlus 1.基础CRUD BaseMapper 2.代码生成器 3. 全局主键 Sequence主键 4. 热加载 ...
- 2019-11-29-VisualStudio-断点调试详解
原文:2019-11-29-VisualStudio-断点调试详解 title author date CreateTime categories VisualStudio 断点调试详解 lindex ...
- .net core SIMD范例分析
单指令多数据流(SIMD)是CPU基本运算之外为了提高并行处理多条数据效率的技术,常用于多媒体处理如视频,3D模拟的计算.实现方式不同品牌的CPU各有自己的指令集,如SSE MMX 3DNOW等. C ...
- [转]ASP.NET Core Web API 最佳实践指南
原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 转自 介绍# 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但 ...
- C# 通过反射获取winform上的控件
比如获取Button按钮: System.Reflection.FieldInfo[] fieldInfo = form.GetType().GetFields(System.Reflection.B ...
- moodle3.7上传中文文件,无法引用,图片不显示
初始安装moodle3.7 上传图片,名称为中文时,无法引用图片,图片不显示.这里采用修改moodle根目录下的config.php文件, 添加了变量$CFG->slasharguments = ...
- Springboot 项目源码 vue.js html 跨域 前后分离 shiro权限
官网:www.fhadmin.org 特别注意: Springboot 工作流 前后分离 + 跨域 版本 (权限控制到菜单和按钮) 后台框架:springboot2.1.2+ activiti6.0 ...
- Android源码分析(十四)----如何使用SharedPreferencce保存数据
一:SharedPreference如何使用 此文章只是提供一种数据保存的方式, 具体使用场景请根据需求情况自行调整. EditText添加saveData点击事件, 保存数据. diff --git ...