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)为最常见的对称加密算法加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合.缺点是密钥的传输 ...
随机推荐
- unityUIMask
Mask: 与Image组件配合工作,根据Image的覆盖区域来定位显示范围,所有该Image的子级UI元素,超出此区域的部分会被隐藏(包括UI的交互事件) 实现原理: Mask会赋予Image一个特 ...
- xunsearch强制刷新
$index = $xs->index; $index->flushLogging(); 等价于 util/Indexer.php --flush-log demo
- 另一种缓存,Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
- POSIX 正则表达式 BRE与ERE的差异
BRE,标准正则表达式,basic regular expressions ERE,扩展正则表达式,Extended Regular Expressions POSIX 正则表达式 传统上,POSIX ...
- 使用Net Mail发送邮件
最近用到了发送邮件这个功能,简单记录一下案例.代码如下: using System; using System.Collections.Generic; using System.Linq; usin ...
- ASP.NET Core In Process Hosting on IIS with ASP.NET Core 2.2(转载)
ASP.NET Core 2.2 has been out for a while now and with it come some significant improvements to the ...
- mysql删除重复数据(通过多个字段分组,删除某一字段为空的数据)
DELETE FROM t_questions WHERE Id in ( SELECT Id FROM ( SELECT Id FROM `t_questions` WHERE (Name,Ques ...
- sedlauncher.exe 磁盘爆满
打开应用和功能,搜KB4023057,然后卸载. 快捷键WIN+R打开运行,输入services.msc回车打开系统服务,找到Windows Remediation Service (sedsvc)和 ...
- PHP中,json汉字编码
当用json与js或者其它客户端交互时,如果有中文,则会变成unicode.虽然能使用,但是影响观看.不好调试呀.从网上找到了几个方法 一,用下面这个函数,需要编码时,直接调用这个函数就成 funct ...
- 2019 苏州朗动java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.苏州朗动等公司offer,岗位是Java后端开发,因为发展原因最终选择去了苏州朗动,入职一年时间了,也成为了面 ...