📄 新建 文本文档 (4).txt
字号:
C#实现DES加密解密
DES算法描述简介:
DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司研制的一种加密算法,美国国家标准局于1977年公布把它作为非机要部门使用的数据加密标准;它是一个分组加密算法,他以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密匙长度是56位(因为每个第8 位都用作奇偶校验),密匙可以是任意的56位的数,而且可以任意时候改变.
/// <summary>
??/// DES加密
??/// </summary>
??/// <param name="Data">被加密的明文</param>
??/// <param name="Key">密钥</param>
??/// <param name="Vector">向量</param>
??/// <returns>密文</returns>
??public static Byte[] DESEncrypt(Byte[] Data, String Key, String Vector)
??{
?? Byte[] bKey = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
?? Byte[] bVector = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
?? Byte[] Cryptograph = null; // 加密后的密文
?? DESCryptoServiceProvider EncryptProvider = new DESCryptoServiceProvider();
?? EncryptProvider.Mode = CipherMode.CBC;
?? EncryptProvider.Padding = PaddingMode.Zeros;
?? try
?? {
????// 开辟一块内存流
????using (MemoryStream Memory = new MemoryStream())
????{
???? // 把内存流对象包装成加密流对象
???? using (CryptoStream Encryptor = new CryptoStream(Memory,
???? EncryptProvider.CreateEncryptor(bKey, bVector),
???? CryptoStreamMode.Write))
???? {
??????// 明文数据写入加密流
??????Encryptor.Write(Data, 0, Data.Length);
??????Encryptor.FlushFinalBlock();
??????Cryptograph = Memory.ToArray();
???? }
????}
?? }
?? catch
?? {
????Cryptograph = null;
?? }
?? return Cryptograph;
??}
??/// <summary>
??/// DES解密
??/// </summary>
??/// <param name="Data">被解密的密文</param>
??/// <param name="Key">密钥</param>
??/// <param name="Vector">向量</param>
??/// <returns>明文</returns>
??public static Byte[] DESDecrypt(Byte[] Data, String Key, String Vector)
??{
?? Byte[] bKey = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Key.PadRight(bKey.Length)), bKey, bKey.Length);
?? Byte[] bVector = new Byte[8];
?? Array.Copy(Encoding.UTF8.GetBytes(Vector.PadRight(bVector.Length)), bVector, bVector.Length);
?? Byte[] original = null;
?? DESCryptoServiceProvider CryptoProvider = new DESCryptoServiceProvider();
?? CryptoProvider.Mode = CipherMode.CBC;
?? CryptoProvider.Padding = PaddingMode.Zeros;
?? try
?? {
????// 开辟一块内存流,存储密文
????using (MemoryStream Memory = new MemoryStream(Data))
????{
???? // 把内存流对象包装成加密流对象
???? using (CryptoStream Decryptor = new CryptoStream(Memory,
???? CryptoProvider.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;
??}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -