一:举例
账号,密码都是我们经常用到的,在注册一新账号时,还得填写密码,当你注册成功的时候,那个密码是已经加密了,只是在你眼里就是一个正常的密码,或者一串字母加一串数字而已,当然没经过加密也是这样,当经过加密后的密码就不一样了,如 “gl001” 这个密码经过加密后就成这样:“JCowO10WSQ7ob6xTLHChtA==”,这便是经过加密的密码;
经过加密后的密码或者别的就安全很多,不会那么随意就被破解或者泄露,同时安全性也提高很多!!
二:思路
加密的方式:加密方式就分两种:
一:非对称加密 二:对称加密
而密钥也分:公钥和私钥
公钥:是向外界公开的; 私钥:则是自己保留,不对外公开
两种的关系:都是通过某种算法得到的密钥对
三:内容
1、类
一: private static string Key
{
get { return @")O[NB]6,YF}+efcaj{+oESb9d8>Z'e9M"; }
}
二: private static string IV
{
get { return @"L+\~f4,Ir)b$=pkf"; }
}
如上,上面的代码有两段,每段的功能都不一样,准确来说,是起到的作用不一样
第一段:获取密钥,密钥,加密和解密的时候都需要用到
第二段:获取向量
(1)加密 这里的参数类型是 btye[]
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;
}
如上便是加密的流程;
Byte[] Cryptograph = null; 加密后的密文
using (MemoryStream Memory = new MemoryStream() ) { …… } 开辟/创建一块内存流
using (CryptoStream Encryptor = new CryptoStream(Memory,Aes.CreateEncryptor(bKey, bVector), CryptoStreamMode.Write)) {……} 把内存流对象包括成加密对象
Encryptor.Write(Data, 0, Data.Length); 明文数据写入加密流
(2)解密 这里的参数类型是 btye[]
有加密,便有解密,如下
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;
}
解释或者说明其中部分代码的作用:
Byte[] original = null; 解密或的铭文
using (MemoryStream Memory = new MemoryStream(Data)) { …… } 开辟/创建一块内存流,存储密文
using (MemoryStream originalMemory = new MemoryStream()) {……} 明文存储区
注意!!:
using (CryptoStream Decryptor = new CryptoStream(Memory,
Aes.CreateDecryptor(bKey, bVector),
CryptoStreamMode.Read))
{……}
这句代码跟上面加密的的那句的作用一样,都是把内存流对象包装成加密流对象,但是它们的单词不一样,所返回的结果也不一样;
如:CreateDecryptor () :对称解密器对象
CreateEncryptor () : 对称加密器对象
还有 Read 和 Write
这些都是可以看到的,都是可以从从元数据里看的到的;