首页 > 其他 > 详细

DES加解密,Hash加密

时间:2016-01-22 10:37:51      阅读:313      评论:0      收藏:0      [点我收藏+]

DES可以实现加密和解密,

Hash仅能实现加密,然后对密文进行比较处理。

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
        }

        /// <summary>
        /// 当前使用的加解密方式
        /// </summary>
        CryptType type = CryptType.DES;

        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;
            }
        }

        /// <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 = MD5_Crypt.GetHashStr(MingWen);
                }
                else if (type == CryptType.DES)
                {
                    MiWen = DES_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.DES)
                    MingWen = DES_Crypt.Decrypt(MiWen);
                else if (type == CryptType.MD5)
                {
                    MessageBox.Show("MD5无法解密");
                }
            }
            textBox_EncyptText.Text = MingWen;
        }
    }

    /// <summary>
    /// MD5加密
    /// </summary>
    public class MD5_Crypt
    {
        #region 公共方法

        /// <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("-", "");
        }
        #endregion
    }

    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, 0, 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, 0, byteArray.Length);
                        cStream.FlushFinalBlock();
                        decrypt = Encoding.UTF8.GetString(mStream.ToArray());
                    }
                }
            }
            catch { }
            des.Clear();
            return decrypt;
        }
    }
   
}

 

DES加解密,Hash加密

原文:http://www.cnblogs.com/gsk99/p/5150382.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!