1、DES一共就有4个参数参与运作:明文、密文、密钥、向量。其中这4者的关系可以理解为:

  密文=明文+密钥+向量;
  明文=密文-密钥-向量;
  为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复,那么这个词加上密钥形成的密文,仍然会重复,这给破解者有机可乘,破解者可以根据重复的内容,猜出是什么词,然而一旦猜对这个词,那么,他就能算出密钥,整篇文章就被破解了!加上向量这个参数以后,每块文字段都会依次加上一段值,这样,即使相同的文字,加密出来的密文,也是不一样的,算法的安全性大大提高!

2、AES是美国联邦政府采用的商业及政府数据加密标准,预计将在未来几十年里代替DES在各个领域中得到广泛应用。AES提供128位密钥,因此,128位AES的加密强度是56位DES加密强度的1021倍还多。假设可以制造一部可以在1秒内破解DES密码的机器,那么使用这台机器破解一个128位AES密码需要大约149亿万年的时间。

3、MD5和SHA1散列通常被用于密码中,很多人称其为散列算法。散列是不可逆的,也就是没有了"解密"这个说法。

des加解密参考:http://www.faceye.net/search/110023.html

加解密只是参考:http://blog.csdn.net/z1x1c1v1/article/details/8755032

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO; namespace WinForms_Crypt
{
public partial class Form3 : Form
{
/// <summary>
/// 加密解密方式
/// </summary>
private enum CryptType
{
MD5,DES,AES
} /// <summary>
/// 当前使用的加解密方式
/// </summary>
CryptType type = CryptType.MD5; public Form3()
{
InitializeComponent(); if (type == CryptType.MD5)
{
button_Decrypt.Enabled = false;
button_Encrypt.Enabled = true;
}
else if (type == CryptType.DES)
{
button_Decrypt.Enabled = true;
button_Encrypt.Enabled = true;
}
else if (type == CryptType.AES)
{
button_Decrypt.Enabled = true;
button_Encrypt.Enabled = true;
}
} /// <summary>
/// 加密
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_Encrypt_Click(object sender, EventArgs e)
{
//明文
string MingWen = textBox_DecryptText.Text.Trim();
//加密得到的密文
string MiWen = "";
if (MingWen != "")
{
if (type == CryptType.MD5)
{
MiWen = "MD5Base64:"+MD5_Crypt.GetHashStr(MingWen);
MiWen += "\r\n MD5:" + MD5_Crypt2.MD5(MiWen);
MiWen += "\r\n SHA128:" + MD5_Crypt2.SHA128(MiWen);
MiWen += "\r\n SHA256:" + MD5_Crypt2.SHA256(MiWen);
MiWen += "\r\n SHA384:" + MD5_Crypt2.SHA384(MiWen);
MiWen += "\r\n SHA512:" + MD5_Crypt2.SHA512(MiWen);
}
else if (type == CryptType.DES)
{
MiWen = DES_Crypt.Encrypt(MingWen);
}
else if (type == CryptType.AES)
{
MiWen = AeS_Crypt.Encrypt(MingWen);
}
}
textBox_EncyptText.Text = MiWen;
} /// <summary>
/// 解密
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button_Decrypt_Click(object sender, EventArgs e)
{
//密文
string MiWen = textBox_EncyptText.Text.Trim();
//解密得到的明文
string MingWen = "";
//无法解析哈希值
if (MiWen != "")
{
if (type == CryptType.MD5)
{
MessageBox.Show("MD5无法解密");
}
else if (type == CryptType.DES)
{
MingWen = DES_Crypt.Decrypt(MiWen);
}
else if (type == CryptType.AES)
{
MingWen = AeS_Crypt.Decrypt(MiWen); }
}
textBox_DecryptText.Text = MingWen;
}
} /// <summary>
/// MD5加密
/// </summary>
public class MD5_Crypt
{
/// <summary>
/// MD5加密
/// </summary>
/// <param name="inputByt">原文</param>
/// <returns>加密后的字节数组</returns>
public static byte[] GetHash(byte[] inputByt)
{
HashAlgorithm algorithm = HashAlgorithm.Create("MD5");
return algorithm.ComputeHash(inputByt);
}
/// <summary>
/// MD5加密
/// </summary>
/// <param name="inputStr">原文</param>
/// <returns>加密后的字节数组</returns>
public static byte[] GetHash(string inputStr)
{
byte[] inputByt = new UnicodeEncoding().GetBytes(inputStr); return GetHash(inputByt);
}
/// <summary>
/// MD5加密
/// </summary>
/// <param name="inputStr">原文</param>
/// <returns>BASE64编码字符串</returns>
public static string GetHashStr(string inputStr)
{
return Convert.ToBase64String(GetHash(inputStr));
} /// <summary>
/// MD5加密
/// </summary>
/// <param name="inputStr">原文</param>
/// <returns>32位编码</returns>
public static string GetHashString32(string inputStr)
{
string hash = BitConverter.ToString(GetHash(inputStr));
return hash.Replace("-", "");
} /// <summary>
/// MD5加密
/// </summary>
/// <param name="inputStr">原文</param>
/// <returns>32位编码</returns>
public static string GetHashString(byte[] inputStr)
{
string hash = BitConverter.ToString(GetHash(inputStr));
return hash.Replace("-", "");
}
} /// <summary>
/// DES加解密
/// </summary>
public class DES_Crypt
{
/// <summary>
/// 获取密钥
/// </summary>
private static string Key
{
get { return @"P@+#wG%A"; }
} /// <summary>
/// 获取向量
/// </summary>
private static string IV
{
get { return @"L*n67}G\Mk@k%:~Y"; }
} /// <summary>
/// DES加密
/// </summary>
/// <param name="plainStr">明文字符串</param>
/// <returns>密文</returns>
public static string Encrypt(string plainStr)
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Encoding.UTF8.GetBytes(plainStr); string encrypt = null;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, des.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, , byteArray.Length);
cStream.FlushFinalBlock();
encrypt = Convert.ToBase64String(mStream.ToArray());
}
}
}
catch { }
des.Clear();
return encrypt;
} /// <summary>
/// DES解密
/// </summary>
/// <param name="encryptStr">密文字符串</param>
/// <returns>明文</returns>
public static string Decrypt(string encryptStr)
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Convert.FromBase64String(encryptStr); string decrypt = null;
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, des.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, , byteArray.Length);
cStream.FlushFinalBlock();
decrypt = Encoding.UTF8.GetString(mStream.ToArray());
}
}
}
catch { }
des.Clear();
return decrypt;
}
} /// <summary>
/// AES加解密
/// </summary>
public class AeS_Crypt
{
/// <summary>
/// 获取密钥
/// </summary>
private static string Key
{
get { return @"qO[NB]6,YF}gefcaj{+oESb9d8>Z'e9M"; }
} /// <summary>
/// 获取向量
/// </summary>
private static string IV
{
get { return @"L+\~f4.Ir)b$=pkf"; }
} /// <summary>
/// AES加密
/// </summary>
/// <param name="plainStr">明文字符串</param>
/// <returns>密文</returns>
public static string Encrypt(string plainStr)
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Encoding.UTF8.GetBytes(plainStr); string encrypt = null;
Rijndael aes = Rijndael.Create();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, , byteArray.Length);
cStream.FlushFinalBlock();
encrypt = Convert.ToBase64String(mStream.ToArray());
}
}
}
catch { }
aes.Clear();
return encrypt;
} /// <summary>
/// AES解密
/// </summary>
/// <param name="encryptStr">密文字符串</param>
/// <returns>明文</returns>
public static string Decrypt(string encryptStr)
{
byte[] bKey = Encoding.UTF8.GetBytes(Key);
byte[] bIV = Encoding.UTF8.GetBytes(IV);
byte[] byteArray = Convert.FromBase64String(encryptStr); string decrypt = null;
Rijndael aes = Rijndael.Create();
try
{
using (MemoryStream mStream = new MemoryStream())
{
using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write))
{
cStream.Write(byteArray, , byteArray.Length);
cStream.FlushFinalBlock();
decrypt = Encoding.UTF8.GetString(mStream.ToArray());
}
}
}
catch { }
aes.Clear();
return decrypt;
}
} public class MD5_Crypt2
{
//16字节,128位
public static string MD5(string str)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
byte[] byteArr = MD5.ComputeHash(buffer);
return BitConverter.ToString(byteArr);
} //20字节,160位
public static string SHA128(string str)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
SHA1CryptoServiceProvider SHA1 = new SHA1CryptoServiceProvider();
byte[] byteArr = SHA1.ComputeHash(buffer);
return BitConverter.ToString(byteArr);
} //32字节,256位
public static string SHA256(string str)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
SHA256CryptoServiceProvider SHA256 = new SHA256CryptoServiceProvider();
byte[] byteArr = SHA256.ComputeHash(buffer);
return BitConverter.ToString(byteArr);
} //48字节,384位
public static string SHA384(string str)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
SHA384CryptoServiceProvider SHA384 = new SHA384CryptoServiceProvider();
byte[] byteArr = SHA384.ComputeHash(buffer);
return BitConverter.ToString(byteArr);
} //64字节,512位
public static string SHA512(string str)
{
byte[] buffer = Encoding.UTF8.GetBytes(str);
SHA512CryptoServiceProvider SHA512 = new SHA512CryptoServiceProvider();
byte[] byteArr = SHA512.ComputeHash(buffer);
return BitConverter.ToString(byteArr);
}
}
}

DES,AeS加解密,MD5,SHA加密的更多相关文章

  1. Asp.Net Core 2.0 项目实战(7)MD5加密、AES&DES对称加解密

    本文目录 1. 摘要 2. MD5加密封装 3. AES的加密.解密 4. DES加密/解密 5. 总结 1.  摘要 C#中常用的一些加密和解密方案,如:md5加密.RSA加密与解密和DES加密等, ...

  2. .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转

    .net mvc 站点自带简易SSL加密传输   因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...

  3. cryptoJS AES 加解密简单使用

    简单记录一下,前端利用 cryptoJS 如何加解密的.主要是关于 AES 加解密. 需求描述:需要对 url 中的参数进行 AES 解密,然后再把该参数进行 MD5 加密通过接口传递. AES AE ...

  4. C#与java中的AES加解密互解算法

    一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string va ...

  5. [转帖]前端 crypto-js aes 加解密

    前端 crypto-js aes 加解密 2018.04.13 11:37:21字数 891阅读 59767 https://www.jianshu.com/p/a47477e8126a 原来前端也有 ...

  6. C# RSA加解密与验签,AES加解密,以及与JAVA平台的密文加解密

    前言: RSA算法是利用公钥与密钥对数据进行加密验证的一种算法.一般是拿私钥对数据进行签名,公钥发给友商,将数据及签名一同发给友商,友商利用公钥对签名进行验证.也可以使用公钥对数据加密,然后用私钥对数 ...

  7. AES加解密程序的实现

    AES加解密程序的实现正常情况,用户不能访问sys.dbms_crypto,需要DBA授权:grant execute on dbms_crypto to crm;建立加解密的PKG_AES包:CRE ...

  8. 记一次Java AES 加解密 对应C# AES加解密 的一波三折

    最近在跟三方对接 对方采用AES加解密 作为一个资深neter Ctrl CV 是我最大的优点 所以我义正言辞的问他们要了demo java demo代码: public class EncryptD ...

  9. AES加解密算法在Android中的应用及Android4.2以上版本调用问题

     from://http://blog.csdn.net/xinzheng_wang/article/details/9159969 AES加解密算法在Android中的应用及Android4.2以上 ...

随机推荐

  1. Cosh.3

    查壳.没有 拖 OD 查找字符串 找到有用的东西   顺线往上看       找到  大概算入口处  下断 就从这里开始  单步下去吧 name的变幻 Serial的变幻 直接翻译出来了   继续看看 ...

  2. 字符编码详解及由来(UNICODE,UTF-8,GBK)[转帖]

    相信許多人對字符編碼都不是很了解,透過下文可以清晰的理解各种字符编码方式详解及由来. 一直对字符的各种编码方式懵懵懂懂,什么ANSI.UNICODE.UTF-8.GB2312.GBK.DBCS.UCS ...

  3. 黑苹果-IOS学习的开始

    深知安装黑苹果的不易,在这里写一下关于我的Thinkpad E430c安装黑苹果教程(Mac版本:Yosemite 10.10.4),希望能够帮助有需要的朋友. 首先贴上我的电脑配置报表: ----- ...

  4. 《JavaScript_DOM编程艺术第二版(中文)》整书笔记

    目录 第3章:DOM 第4章:案例研究 第5章:最佳实践 第6章:案例改进 第7章:动态创建标记 第8章:充实文档的内容 第9章:CSS-DOM 第3章:DOM 文档:DOM中的"D&quo ...

  5. Python 基礎 - 字典的操作使用

    接下來介紹字典,這在未來工作上,會是很常使用的,就來好好了解一下唄- 字典是一個 key(鍵)-value(值) 的數據類型,可以儲存很多訊息 #!/usr/bin/env python3 # -*- ...

  6. KANO模型

    一.满意度的定义 消费者的满意度是取决于他们对企业所提供的产品和服务的事前期待,与实际(感知)效果之间的比较后,用户形成的开心或失望的感觉.就是说,如果购后在实际消费中的实际效果与事前期待相符合,则感 ...

  7. JQuery EasyUI DataGrid常用操作及注意事项(未完)

    1.获取当前选中行,如果没有选中行,则返回 null var row = $('#gridID').datagrid('getSelected'); 2.获取当前所有选中行数据,返回的是选择的数组数据 ...

  8. jstl 标签库的使用

    JSTL 核心标签库 使用   JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.ot ...

  9. php部分---PDO;

    PDO数据访问抽象层 PDO的三个功能: 1.操作其它数据库2.事务功能3.防止SQL注入攻击 操作数据库: 造PDO对象 //$dsn = "mysql:dbname=mydb;host= ...

  10. CentOS7 搭建python3 Django环境

    yum install gcc yum install make yum install openssl-devel -y yum install sqlite-devel -y wget https ...