[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
var key = "cheayeon";
var iv = "encoding";
var text = "sb sb ha ha ha";
//对text,key iv 进行base64加密
var enKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(key));
var enIv = Convert.ToBase64String(Encoding.UTF8.GetBytes(iv));
var enText = Convert.ToBase64String(Encoding.UTF8.GetBytes(text));
//加密
var encryp = AesEncryp(enText, enKey,enIv);
//解密
var decryp = AesDecryp(encryp, enKey, enIv); }
/// <summary>
/// 加密密text
/// 王剑锋 2018年7月7日09:58:34
/// </summary>
/// <param name="text">明文</param>
/// <param name="key">秘钥,Base64串</param>
/// <param name="iv">向量,Base64串</param>
/// <returns></returns>
public string AesEncryp(string text,string key,string iv)
{
var aes = Aes.Create();
//AES-128-CBC PKCS#7
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.BlockSize = 128;
//Base64解密text,KEY,IV,不够16位填充0
aes.Key = Padding16(Convert.FromBase64String(key),0);
aes.IV = Padding16(Convert.FromBase64String(iv),0);
//获取该算法规则下的加密器
var encryp = aes.CreateEncryptor();
//加密之前加一个Base64解密 ,要加密的数据
var dataBytes = Convert.FromBase64String(text);
//获取AES-128-CBC PKCS#7 密文
var enData = encryp.TransformFinalBlock(dataBytes,0, dataBytes.Length);
return Convert.ToBase64String(enData);
}
/// <summary>
/// 解密text
/// 王剑锋 2018年7月7日09:58:16
/// </summary>
/// <param name="text">密文</param>
/// <param name="key">秘钥,Base64串</param>
/// <param name="iv">向量,Base64串</param>
/// <returns></returns>
public string AesDecryp(string text, string key, string iv)
{
var aes = Aes.Create();
//AES-128-CBC PKCS#7
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
aes.KeySize = 128;
aes.BlockSize = 128;
//Base64解密text,KEY,IV
aes.Key = Padding16(Convert.FromBase64String(key),0);
aes.IV = Padding16(Convert.FromBase64String(iv),0);
//获取该算法规则下的解密器
var encryp = aes.CreateDecryptor();
//加密之前加一个Base64解密 ,要加密的数据
var dataBytes = Convert.FromBase64String(text);
//获取AES-128-CBC PKCS#7 明文
var enData = encryp.TransformFinalBlock(dataBytes, 0, dataBytes.Length);
return Encoding.UTF8.GetString(enData);
}
/// <summary>
/// 不够16位的整数倍,已指定字符填充
/// </summary>
/// <param name="array"></param>
/// <param name="padding"></param>
/// <returns></returns>
public byte[] Padding16(byte [] array,byte padding)
{
int group = (array.Length + 15) / 16;
var newArray = new byte[group*16];
for (int i = 0; i < newArray.Length; i++)
{
newArray[i] = (i < array.Length ? array[i] : padding);
}
return newArray;
}

  

微信AES-128-CBC加密解密的更多相关文章

  1. 微信小程序aes前后端加密解密交互

    aes前后端加密解密交互 小程序端 1. 首先引入aes.js /** * [description] CryptoJS v3.1.2 * [description] zhuangzhudada so ...

  2. golang AES/ECB/PKCS5 加密解密 url-safe-base64

    因为项目的需要用到golang的一种特殊的加密解密算法AES/ECB/PKCS5,但是算法并没有包含在标准库中,经过多次失败的尝试,终于解码成功,特此分享: /* 描述 : golang AES/EC ...

  3. php AES cbc模式 pkcs7 128位加密解密(微信小程序)

    PHP AES CBC模式PKCS7 128位加密 加密: $key = '1234567812345678'; $iv = '1234567890123456'; $message = '12345 ...

  4. JAVA AES CBC 加密 解密

    AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当 ...

  5. javascript 与 PHP 通信加密,使用AES 128 CBC no padding,以及ios,java,c#文章例子

    运行环境 php7.0 不适用于 php7.0以上版本,因为mcrypt_encrypt()函数已删除 为何要采用 no padding 这种形式: AES加密如果原输入数据不够16字节的整数位,就要 ...

  6. IOS 与 PHP 通信加密,使用AES 128 CBC no padding

    这个网上的资料真实浩如烟海,但是真正有价值的屈指可数 自己尝试了一天多,终于还是搞定了. 再次要感谢网上的前辈么. 比如下面这个关于php和java端的实现: http://my.oschina.ne ...

  7. AES字节数组加密解密流程

    AES类时微软MSDN中最常用的加密类,微软官网也有例子,参考链接:https://docs.microsoft.com/zh-cn/dotnet/api/system.security.crypto ...

  8. python AES 双向对称加密解密

    高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...

  9. Java使用AES算法进行加密解密

    一.加密 /** * 加密 * @param src 源数据字节数组 * @param key 密钥字节数组 * @return 加密后的字节数组 */ public static byte[] En ...

  10. 使用java实现对称加密解密(AES),非对称加密解密(RSA)

    对称加密:双方采用同样的秘钥进行加密和解密.特点是速度快,但是安全性没有非对称加密高 非对称加密:接收方生成的公有秘钥公布给发送方,发送方使用该公有秘钥加密之后,发送给接收方,然后接收方使用私有秘钥解 ...

随机推荐

  1. logback高级特性二 异步记录日志

    问题描述: 下图中JProfiler可看出logback的日志输出占了64%的cpu消耗 优化方案: 1. 这部分写日志的代码写了一些报文数据,确实是比较大的字符串.先禁掉控制台输出,生产环境也不需要 ...

  2. AngularJS:Select

    ylbtech-AngularJS:Select 1.返回顶部 1. AngularJS Select(选择框) AngularJS 可以使用数组或对象创建一个下拉列表选项. 使用 ng-option ...

  3. 使用Tomcat+Redis来实现集群部署中的Session共享问题

    一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储Session 2.使用Cookie来存储Session 3.使用Redis ...

  4. C# 面向切面编程--监控日志记录方案

    背景:现在公司整体在做监控平台,要求把各个部分的细节都记录下来,在前台页面上有所显示,所以现在需要做的就是一个监控日志的记录工作,今天讲的就是渲染监控日志的例子. 现状:当前的渲染程序没有为监控日志记 ...

  5. mysql日期类型

    日期类型 DATE TIME DATETIME TIMESTAMP YEAR 作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等 YEAR YYYY(1901/2155) DAT ...

  6. 02-26C#三级省市区ajax联动控件,利用UpdatePanel,以及页面取值

    第一步:设置界面 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="PCAC ...

  7. 使用ssh-agent管理密钥

    ssh-agent是ssh代理程序,使用ssh-agent可以方面管理私钥. ssh-agent主要使用在如下两个场景: 1.使用不同的密钥连接不同主机,每次连接都要指定私钥; 2.当私钥设置了密码, ...

  8. SonarQube在CentOS上的安装

    1 简介 SonarQube 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等 ...

  9. C#获取访问者ip和获取本机ip地址

    获取访问者ip: string userIP; // HttpRequest Request = HttpContext.Current.Request; HttpRequest Request = ...

  10. dataview 组件使用示例

    来自<sencha touch 权威指南> ------------------------------- 例子1——app.js代码如下: Ext.require(['Ext.data. ...