C# AES 128加密,解密示例

        /// <summary>
        /// AES加密
        /// </summary>
        /// <param name="clearTxt"></param>
        /// <returns></returns>
        public static string AesEncrypt(string clearTxt)
        {
            string secretKey = "I15TMSLO0KXUWTHO";

            byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);

            using (RijndaelManaged cipher = new RijndaelManaged())
            {
                cipher.Mode = CipherMode.CBC;
                cipher.Padding = PaddingMode.PKCS7;
                cipher.KeySize = 128;
                cipher.BlockSize = 128;
                cipher.Key = keyBytes;
                cipher.IV = keyBytes;

                byte[] valueBytes = Encoding.UTF8.GetBytes(clearTxt);

                byte[] encrypted;
                using (ICryptoTransform encryptor = cipher.CreateEncryptor())
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream writer = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                        {
                            writer.Write(valueBytes, 0, valueBytes.Length);
                            writer.FlushFinalBlock();
                            encrypted = ms.ToArray();

                            StringBuilder sb = new StringBuilder();
                            for (int i = 0; i < encrypted.Length; i++)
                                sb.Append(Convert.ToString(encrypted[i], 16).PadLeft(2, ‘0‘));
                            return sb.ToString().ToUpperInvariant();
                        }
                    }
                }
            }
        }

        /// <summary>
        /// AES解密
        /// </summary>
        /// <param name="encrypted"></param>
        /// <returns></returns>
        public static string AesDecypt(string encrypted)
        {
            string secretKey = "I15TMSLO0KXUWTHO";

            byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);

            using (RijndaelManaged cipher = new RijndaelManaged())
            {
                cipher.Mode = CipherMode.CBC;
                cipher.Padding = PaddingMode.PKCS7;
                cipher.KeySize = 128;
                cipher.BlockSize = 128;
                cipher.Key = keyBytes;
                cipher.IV = keyBytes;

                List<byte> lstBytes = new List<byte>();
                for (int i = 0; i < encrypted.Length; i += 2)
                    lstBytes.Add(Convert.ToByte(encrypted.Substring(i, 2), 16));

                using (ICryptoTransform decryptor = cipher.CreateDecryptor())
                {
                    using (MemoryStream msDecrypt = new MemoryStream(lstBytes.ToArray()))
                    {
                        using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                            {
                                return srDecrypt.ReadToEnd();
                            }
                        }
                    }
                }
            }
        }
时间: 2024-08-25 14:33:01

C# AES 128加密,解密示例的相关文章

基于RSA的加密/解密示例C#代码

在C#程序中,大家可能比较熟悉的方式是md5加密解密方式,对RSA可能并不是很熟悉, 下面就说一下RSA加密和解密的算法: using System;using System.Security.Cryptography;using System.Text;class RSACSPSample{    static void Main()    {        try        {            string str_Plain_Text = "How are you?How are

.NET/andriod/java/iOS AES通用加密解密

移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都实践了一遍,实现了.NET,java(andriod),iOS都同一套的加密算法,下面就分享给大家. AES加密有多种算法模式,下面提供两套模式的可用源码. 加密方式: 先将文本AES加密 返回Base64转码 解密方式: 将数据进行Base64解码 进行AES解密 一.CBC(Cipher Blo

基于AES对称加密解密的代码块

提供此代码方便自己以后直接查询用,也可以方便其他朋友直接拿来用. 1 import javax.crypto.Cipher; 2 import javax.crypto.spec.IvParameterSpec; 3 import javax.crypto.spec.SecretKeySpec; 4 import sun.misc.BASE64Decoder; 5 import sun.misc.BASE64Encoder; 6 /** 7 * <p>标题: 对称加密解密AES</p&g

AES简单加密解密的方法实现

package com.mstf.aes; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypt

JAVA AES CBC 加密 解密

AES 256 , KEY 的长度为 32字节(32*8=256bit). AES 128 , KEY 的长度为 16字节(16*8=128bit) CBC 模式需要IV, IV的值是固定写死,还是当参数传入,自己看情况.IV的长度没研究,这里用的是16字符. java PKCS5Padding 对应 C#.NET 的 PKCS7 . 明文,KEY和IV 三者 string 转 byte[] 时要统一编码,如UTF-8. 加密后 cipher.doFinal() 得到密文byte[] ,是直接转

PHP AES cbc模式 pkcs7 128加密解密

今天在对接一个第三方接口的时候,对方需要AES CBC模式下的加密.这里简单写一个demo class Model_Junjingbao extends Model { private static $_partnerKey = '6d70a09e4d0f8095'; //获取库存,更新价格信息 public static function test($productId=2780) { $data = array( 'productId'=>$productId, 'startTime'=>

使用pyaes测试AES-ECB 加密解密示例

最近在搞一个蓝牙锁,通信协议说是使用的标准AES-ECB加密.解密,无奈我测试的时候,加密后的数据和通信协议文档给的数据不一致,怀疑文档写的aes-ecb传参是否swap了or非标准AES-ECB?所以想到了用Python验证一下,这里可以使用pyaes模块. 考虑到pip工具安装其他Python模块比较方便,首先安装pip,然后就可以用pip安装其他Python模块了,这里简单介绍一下如何安装pip工具(关于Python和pip在Windows环境下的详细安装方法,可以参考如下网页:http:

iOS AES的加密解密

主要是要得到加密后的原来的字符创,MD5无法得到原有的,仅仅能用AES+base64 要用GTMBase64这个能够自己去下载, 主要看另外2个类文件. #import <Foundation/Foundation.h> @class NSString; @interface NSData (NSData_AES) - (NSData *)AES128EncryptWithKey:(NSString *)key; //加密 - (NSData *)AES128DecryptWithKey:(N

javascript与php使用aes进行加密/解密

javascript:a. 下载: npm install crypto-js b. 代码: var CryptoJS = require("crypto-js"); // 加密 var key = CryptoJS.MD5('hello') key = CryptoJS.enc.Utf8.parse(key) var iv = CryptoJS.enc.Utf8.parse('1234567812345678') var encode = CryptoJS.AES.encrypt(