[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. 分布式缓存系统 Memcached 半同步/半异步模式

    在前面工作线程初始化的分析中讲到Memcached采用典型的Master_Worker模式,也即半同步/半异步的高效网络并发模式.其中主线程(异步线程)负责接收客户端连接,然后分发给工作线程,具体由工 ...

  2. 1138 Postorder Traversal

    题意:给出二叉树的前序序列后中序序列,输出其后序序列的第一个值. 思路:乍一看不就是前序+中序重建二叉树,然后后序遍历嘛!这么做当然不会有错,但是却没有真正领会本题的意图.本题并不是让我们输出后序序列 ...

  3. php 语句块耗时性能测试

    $t= microtime(true);        .............................        echo microtime(true) - $t; 1查看从入口文件 ...

  4. java 最差实践

    HashMap size 陷阱: 错误写法: Map map = new HashMap(collection.size()); for (Object o : collection) { map.p ...

  5. Windows环境下使用.bat安装和卸载服务

    一.Windows环境下使用.bat安装和卸载服务 win7环境 例子中“”Valwell.Dms.HttpService.exe“”为服务程序名称 安装服务 %SystemRoot%\Microso ...

  6. HDFS案例

    shell日志采集 需求说明 点击流日志每天都10T,在业务应用服务器上,需要准实时上传至数据仓库(Hadoop HDFS)上 需求分析 一般上传文件都是在凌晨24点操作,由于很多种类的业务数据都要在 ...

  7. js处理小数加减时精度失真

    最近公司业务有用js处理数据加减,但有时候会出现很多位小数:后来发现是js处理小数时精度失真:为了后边不在犯类似错误,笔者觉得有必要记录下处理方法,当然处理方法有很多种,这里笔者找了一种较为简洁的方法 ...

  8. docker 制作本地镜像

    docker commit 55ddf8d62688 py_wb # 容器ID, 容器名称tag py_wb IP地址:5000/my-web:20180511 # 远程registory地址 我的镜 ...

  9. sys模块和shutil模块

    一.sys模块 常用方法有: #!/usr/bin/env python3 #-*- coding:utf-8 -*- # write by congcong import sys # 命令行参数Li ...

  10. Python基本数据类型--列表、元组、字典、集合

    一.Python基本数据类型--列表(List) 1.定义:[ ]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素. 2.列表的创建: # 方式一 list1 = ['name','ag ...