DES加解密

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;

namespace Win.Secure
{
    
public partial class FrmMain : Form
    {
        
public FrmMain()
        {
            InitializeComponent();
        }

        
private void FrmMain_Load(object sender, EventArgs e)
        {

        }

        
// 密文
        private string key = "H8x_2h1`";

        
/// <summary>
        
/// DEC 加密过程
        
/// </summary>
        
/// <param name="pToEncrypt"></param>
        
/// <param name="sKey"></param>
        
/// <returns></returns>
        public string Encrypt(string pToEncrypt, string sKey)
        {
            
// 把字符串放到byte数组中   
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();   
            
byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
            
// 建立加密对象的密钥和偏移量 
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
            
// 原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
            
// 使得输入密码必须输入英文文本 
            MemoryStream ms = new MemoryStream();      
            CryptoStream cs 
= new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0, inputByteArray.Length);
            cs.FlushFinalBlock();
            StringBuilder ret 
= new StringBuilder();
            
foreach (byte b in ms.ToArray())
            {
                ret.AppendFormat(
"{0:x2}", b);
            }
            ret.ToString();
            
return ret.ToString();
        }

        
/// <summary>
        
/// DEC 解密过程
        
/// </summary>
        
/// <param name="pToDecrypt"></param>
        
/// <param name="sKey"></param>
        
/// <returns></returns>
        public string Decrypt(string pToDecrypt, string sKey)
        {
            DESCryptoServiceProvider des 
= new DESCryptoServiceProvider();
            
byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
            
for (int x = 0; x < pToDecrypt.Length / 2; x++)
            {
                
int i = (Convert.ToInt32(pToDecrypt.Substring(x * 22), 16));
                inputByteArray[x] 
= (byte)i;
            }
            
// 建立加密对象的密钥和偏移量,此值重要,不能修改   
            des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);   
            des.IV 
= ASCIIEncoding.ASCII.GetBytes(sKey);
            MemoryStream ms 
= new MemoryStream();
            CryptoStream cs 
= new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 
0, inputByteArray.Length);
            cs.FlushFinalBlock();
            
// 建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象  
            StringBuilder ret = new StringBuilder();    
            
return System.Text.Encoding.Default.GetString(ms.ToArray());
        }

        
private void button1_Click(object sender, EventArgs e)
        {
            
string str = Encrypt(textBox1.Text, key);
            textBox2.Text 
= str;
            label1.Text 
= str.Length.ToString();
        }

        
private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text 
= Decrypt(textBox2.Text, key);
        }  
    }
}
posted @ 2008-10-22 14:25  angushine  阅读(278)  评论(0编辑  收藏  举报