加密工具类:AES的使用

现代网站注册多采用手机号 + 短信验证码形式,对用户信息真实性要求更高,需对用户信息加密保护。介绍了在ASP.NET MVC中使用AES加密工具的方法,包括创建AES文件、密钥、向量,给出加密和解密方法,还提到使用256位加密算法提高安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通常的讲,一个完整的系统,重要的基础核心页面共有三个,分别是:注册、登录以及系统的主页面。若是在网上随便找个网站,我相信,除去一些个别的开放性或公益性的网站,没有多少网站是缺少这三个核心页面的。相对于前几年用户注册信息的填写,现在的注册信息无疑比以前的要求更高,更需要用户提供真实可靠的信息才能完成账号的注册。以前的网站注册都是清一色“自定义式”填写,即账号、密码等数据都由用户自己输入,网站只负责接收并保存用户填写的数据,只要用户输入的信息符合规范(无特殊符号,密码要数字和字母结合等)便可注册成功。然而,现如今的网站则普遍都是通过手机号 + 短信验证码的形式进行注册,和以前相比,对用户信息的真实性要求更高。

那么问题来了,既然已经要求用户需提供真实的信息进行账号的注册,那么相对的也要对用户输入的真实信息进行加密&保护。一个网站的用户信息若是能被轻易的盗取、窥探的话,那么该网站也就废掉了一半。那么,应该如何对重要的数据信息进行加密呢?这就要用到某些加密工具类了,而AES则正是其中较为常见的信息加密工具。

首先,AES无需插件便可在ASP.NET MVC中使用,我们要做的是先在项目中创建一个专门用于存放静态(公共)类的文件夹,命名为Common,接着便可以在该文件夹中创建一份AES文件,完成后如图:
在这里插入图片描述
第二步,创建密钥
在这里插入图片描述
此处的密钥相当于是加密压缩包,用户在注册页面中所输入的重要信息都会通过该密钥进行加密,接着我们将加密后的用户信息再存放到数据库中的话,便可大大提高用户信息的安全性。注意,密钥不可轻易改动,否则可能会使录入的用户信息无法进行登录。

第三步,获取向量
在这里插入图片描述
向量是通过上一步的密钥产生的,如果说密钥是开启用户信息的钥匙,那么向量则是用户信息的保护锁。

第四步,AES加密方法:
/// 需要用到的参数
/// 《param name=“Data”>被加密的明文</param》
/// 《param name=“Key”>密钥</param》
/// 《param name=“Vector”>向量</param》
/// 《returns>密文</returns》
public static Byte[] AESEncrypt(Byte[] Data, String Key, String Vector)
{
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] Cryptograph = null; // 加密后的密文
Rijndael Aes = Rijndael.Create();
try
{
// 开辟一块内存流
using (MemoryStream Memory = new MemoryStream())
{
// 把内存流对象包装成加密流对象
using (CryptoStream Encryptor = new CryptoStream(Memory,
Aes.CreateEncryptor(bKey, bVector),
CryptoStreamMode.Write))
{
// 明文数据写入加密流
Encryptor.Write(Data, 0, Data.Length);
Encryptor.FlushFinalBlock();
Cryptograph = Memory.ToArray();
}
}
}
catch
{
Cryptograph = null;
}
return Cryptograph;
};
用户第一次在系统中输入自己的个人真实数据时,录入数据库的是AES加密后的数据,然而当用户使用注册后的账号登陆系统时,这部分操作为解密操作。AES是一种可逆的加密工具类,何为可逆?即既可以通过AES对信息进行加密,又可以运用AES对用户输入的信息进行解密。

第四步,AES解密方法:
public static Byte[] AESDecrypt(Byte[] Data, String Key, String Vector)
{
Byte[] bKey = new Byte[32];
Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
Byte[] bVector = new Byte[16];
Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
Byte[] original = null; // 解密后的明文
Rijndael Aes = Rijndael.Create();
try
{
// 开辟一块内存流,存储密文
using (MemoryStream Memory = new MemoryStream(Data))
{
// 把内存流对象包装成加密流对象
using (CryptoStream Decryptor = new CryptoStream(Memory,
Aes.CreateDecryptor(bKey, bVector),
CryptoStreamMode.Read))
{
// 明文存储区
using (MemoryStream originalMemory = new MemoryStream())
{
Byte[] Buffer = new Byte[1024];
Int32 readBytes = 0;
while ((readBytes = Decryptor.Read(Buffer, 0, Buffer.Length)) > 0)
{
originalMemory.Write(Buffer, 0, readBytes);
}
original = originalMemory.ToArray();
}
}
}
}
catch
{
original = null;
}
return original;
};
当用户使用注册后的账号&密码进行登录时,将用户输入的信息提取出来,进行解密后扔去数据库与数据库中所存放的用户信息进行匹配,这便是解密的操作。

与其他的加密工具类一致,AES也是有着专属的加解密算法的,且算法的位数越高则越难以破解,这也是最后一步我们要做的:
在这里插入图片描述
在这里所用到的是AES中的256位加密算法,安全性较高,接下来是解密算法,与加密算法差不多:
在这里插入图片描述

AES 5.1.0 版 加密与解密软件 此版本软件较早前版本的作了较大修改,特别是调整了软件的界面布局,以使软件更加动感和美观。除此之外此版本软件还在早前的版本上作了以下改进: 1、软件的运行效率较早前版本的略有提升。 2、修正了直接将文件或文件夹拖动到编辑框或列表框中以设置相应路径的功能,以方便用户使用。 3、解决了在加密/解密字符串模块下,修改源字符串或滚动加密后字符串时,对应编辑框内的数据显示混乱这一问题。 4、新增了以十六进制编码显示加密后字符串的功能,以符合某些用户的特殊需求(此功能是依一网友的要求而增加的)。 5、新增了加密/解密单个文件时,给出将要处理(选择待处理文件后)或正处理的文件所需剩余时间,以方便用户进一步了解文件的处理进程。 6、新增了在加密单个文件时保存原文件扩展名的功能,以使用户不会因时间推移而忘记自己所加密的原文件的文件类型(此功能是依一网友的要求而增加的)。 7、放宽了用户在加密/解密批量文件下,用增加文件(而非目录)功能来新增待处理文件时一次只能选择一个文件的限制,允许用户一次选择多个待处理文件,方便了用户的操作。 8、新增了“加密包”这一概念与功能,即用户可以将多个待加密的文件加密成一个加密包,当然也可以将一个加密包中的已加密后的文件数据解密到指定的目录之下。此功能类似于压缩包,但并非先将文件压缩之后再作加密;且其与“加密/解密批量文件”功能也是完全不同的。 9、新增了自动关联文件类型(共三种文件类型:“.cryp”、“.cryb”、“.key”)的功能(在Windows XP及以上的操作系统下需要以管理员权限来运行软件才能真正地关联文件类型)。使得文件的相应的文件在您的电脑里不再是以未知类型文件的图标来显示;当然,您可以更换skins目录下的“CrypedFileIcon.ico”、“CrypedPackageIcon.ico”或“KeyFileIcon.ico”文件来更改图标。这一功能使得用户可以在Windows系统的资源管理器下双击“.cryp”的文件时会自动打开软件并切换到加密/解密单个文件的界面同时设置好“待解密文件路径”与“解密后文件路径”这两个参数。双击“.cryb”的文件时会自动打开软件并切换到加密/解密加密包的界面同时设置“执行模式”为“解密文件”,并以列表的形式给出该加密包中所保存的加密后的文件信息列表。双击“.key”的文件时会自动打开记事本,并将该文件的信息显示在记事本中,以供用户编辑。 当然,本版本软件保存了本系列软件的早前版的所有功能。 注: 1、本软件中在所给定的密钥长度小于所需的密钥长度时采取了自动补全的策略,同时将其中的不可显示字符(如:回车符)用空格取代策略。在初始向量的导入也采用了将其中的不可显示的字符(如:回车符)用空格取代的策略。 2、软件的速度测试是在电脑的配置为:系统类型:32位操作系统;操作系统版本:Windows 7 旗舰版;处理器:Intel(R) Core(TM)2 Duo CPU T5870 @2.00GHZ 2.00GHZ 前端总线/二级缓存:800MHz/2M;内存(RAM):2.00G 速度:667MHz 类型:PC2-5300 DDR2;硬盘类型:SATA 硬盘转速:5400rpm时所得到的。其平均速度不低于16MB/s。 3、建议在Windows 2000及以上版本的操作系统上运行本软件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值