C# AES

AES加密在Socket通讯中经常会用到.现分享一个ASE加密解密类库.



先看看测试 :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AESLib;

namespace AESTest
{
    public class Program
    {
        static void Main(string[] args)
        {
            //静态加解密测试(每一次用的密码都是一样的)->(ABSEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDD)
            Console.WriteLine("静态密码测试加密解密===========================================");
            AESTool aestool_static = new AESTool("ABSEDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEDDD",-1,false);//ABSEDEEE为key
            string mingwen = "---Aonaufly-我-----%%";
            Console.WriteLine("加密明文 : {0}", mingwen);
            string miwen = aestool_static.Encrypt(mingwen);
            Console.WriteLine("得到密文 : {0}", miwen);
            Console.WriteLine("得到明文 : {0}", aestool_static.Decrypt(miwen));

            //动态加解密测试(推荐使用)( 每一次用的密码可能都是不一样的)->( dynamic_key 动态密码(下次可以更改) )
            Console.WriteLine("\n");
            Console.WriteLine("动态密码测试加密解密(推荐使用 -> 优点 : 安全性更高 , 缺点 : 加密产生的字节多,效率没有静态的高)===========================================");
            AESTool aestool_dynamic = new AESTool("我---Aonaufly%%", -1, true);//"我---Aonaufly%%"为动态随机密码与"ACGF~%"进行组合,保密性更强
            string dynamic_key = "ACGF~%";//动态密码(下次可以更改)
            Console.WriteLine("加密明文 : {0}", mingwen);
            miwen = aestool_dynamic.Encrypt_Key(mingwen, dynamic_key);
            Console.WriteLine("得到密文 : {0}", miwen);
            Console.WriteLine("得到明文 : {0}", aestool_dynamic.Decrypt_Key(miwen));
            Console.ReadKey();
        }
    }
}

结果 :

如果对程序安全要求很高的话 , 建议使用动态的加解密方式.这样每一次的密码可能都不一样.非常的安全.

附如何产生随机种子( 在动态密码随机融合的时候用到 )

        /// <summary>
        /// 获得随机补充密码字符char , 动态
        /// </summary>
        private char RondomFillKey2Dynamic
        {
            get 
            {
                int len = dynamic_key_random.Length;
                char[] arr = dynamic_key_random.ToArray<char>();
                Random rdm = new Random(Guid.NewGuid().GetHashCode());//Guid.NewGuid().GetHashCode() 随机种子
                return arr[rdm.Next(0, len)];
            }
        }
时间: 2024-11-19 07:51:36

C# AES的相关文章

密码算法详解——AES

0 AES简介 美国国家标准技术研究所在2001年发布了高级加密标准(AES).AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准. 根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128.AES-192和AES-256.本文主要对AES-128进行介绍,另外两种的思路基本一样,只是轮数会适当增加. 1 算法流程 AES加解密的流程图如下: AES加密过程涉及到4种操作:字节替代(SubBytes).行移位(ShiftRows).列混淆(MixCo

AES —— JAVA中对称加密和解密

package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; impor

python使用M2Crypto模块进行AES加密

AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准.AES将原始数据分成多个4×4字节矩阵来处理,通过预先定义的密钥对每个字节矩阵中的每个字节进行异或.替换.移位以及线性变换操作来达到加密的目的.密钥长度可以是128,192或256比特. 下面是一个利用Python M2Crypto库,并使用aes_128_ecb算法进行加密和解密的例子.首先介绍一下几个关键的点: 1.iv(Initialization vector),即初始化向量

Linux进行AES加密每次结果都不一致并且解密失败报错

1. 现象 windows操作系统下进行"123456"的AES加密 encrypted message is below : QLNYZyjRnKF/zxAjzDt/lw== decrypted message is below : 123456 阿里云服务器,同样是"123456"的密码,每次加密结果都不一样,且不是QLNYZyjRnKF/zxAjzDt/lw==,解密是报错的 2.解决方法 经过检查之后,定位在生成KEY的方法上,如下: public stat

AES加密

package util; import java.io.UnsupportedEncodingException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;impo

使用mbedtls的使用说明和AES加密方法(原来的PolarSSL)

关于PolarSSL mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码.这是双重许可与Apache许可证 2.0版(与GPLv2许可也可).网站上指出,mbed TLS的目标是"易于理解,使用,集成和扩展" 核心SSL 库用C编程语言编写,并实现SSL模块,基本加密功能并提供各种实用功能.与OpenSSL和TLS的其他实现不同,mbed TLS设计为适合小型嵌入式设备,最小完整的TLS堆栈需要60KB的程序空间和64KB的RAM.

aes加密步骤

最近学了aes加密,在这写一下自己对加密过程的理解. 1.加密采用轮秘钥加密,密钥长度一般为128bit,也对应着是16个字节.128bit的秘钥长度对应的是10轮. 首先是轮秘钥的生成,即秘钥的编排方案,先选取128bit的种子秘钥,对10轮版本的aes需要11个轮秘钥,每个轮秘钥都由16个字节组成,一个字节用两个二进制数来表示.秘钥编排算法是面向字的,即一个字4字节,32bit,即每一轮要四个字.轮秘钥的并联叫做扩展秘钥,共有44个字.每个w[i]都是一个字.未完待续,先去写秘钥编排算法.

aes加解密 Illegal key size

做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前也是遇到加密问题,从oracle官网下载了两个文件,覆盖本地文件得到解决. 推测测试环境肯定也是此原因,照此方法,测试环境aes加解密问题得到解决,特此记录下来,避免下次再踩坑. 问题背景: Java几乎各种常用加密算法都能找到对应的实现.因为美国的出口限制,Sun通过权限文件(local_poli

iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的数据加密的时候遇到了一些问题.起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密.RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据.(iOS端公钥加密私钥解密.java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不

Java aes加密C#解密的取巧方法

摘要: 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /** * 加密 * * @param content 需要加密的内... 项目开发过程中遇到一个棘手的问题:A系统使用java开发,通过AES加密数据,B系统使用C#开发,需要从A系统获取数据,但在AES解密的时候遇到麻烦.Java的代码和C#的代码无法互通. Java代码: /**