前言:

想做一個小程式來跟朋友作交談用的加密字串,原本是想用MD5加密方式(請原諒我知道的少,不過我還是會慢慢增加自己的知識)

不過MD5方式好像只能用於加密,無法將其解密,這一點我需要在查查確認(希望我記得更新)

後來找到了DES加密,我也順利使用其他人提供的程式完成一個小程式。

 

 

補充:

public static String Key = "87654321"; //必須8碼
public  static String Iv = "12345678"; //必須8碼

 

一、加密Code

public string Encrypt(string pToEncrypt)
{
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            //把字符串放到byte數組中  
            //原來使用的UTF8編碼,我改成Unicode編碼了,不行  
            byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
            //byte[]  inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);  

            //建立加密對象的密鑰和偏移量  
            //原文使用ASCIIEncoding.ASCII方法的GetBytes方法  
            //使得輸入密碼必須輸入英文文本  
            des.Key = ASCIIEncoding.ASCII.GetBytes(Key);
            des.IV = ASCIIEncoding.ASCII.GetBytes(Iv);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            //Write  the  byte  array  into  the  crypto  stream  
            //(It  will  end  up  in  the  memory  stream)  
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            //Get  the  data  back  from  the  memory  stream,  and  into  a  string  
            StringBuilder ret = new StringBuilder();
            foreach (byte b in ms.ToArray())
            {
                //Format  as  hex  
                ret.AppendFormat("{0:X2}", b);
            }
            ret.ToString();
            return ret.ToString();
}

 

二、解密Code 
public string Decrypt(string pToDecrypt)
{
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            //Put  the  input  string  into  the  byte  array  
            byte[] inputByteArray = new byte[pToDecrypt.Length / 2];
            for (int x = 0; x < pToDecrypt.Length / 2; x++)
            {
                int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));
                inputByteArray[x] = (byte)i;
            }

            //建立加密對象的密鑰和偏移量,此值重要,不能修改  
            des.Key = ASCIIEncoding.ASCII.GetBytes(Key);
            des.IV = ASCIIEncoding.ASCII.GetBytes(Iv);
            MemoryStream ms = new MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            //Flush  the  data  through  the  crypto  stream  into  the  memory  stream  
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();

            //Get  the  decrypted  data  back  from  the  memory  stream  
            //建立StringBuild對象,CreateDecrypt使用的是流對象,必須把解密後的文本變成流對像  
            StringBuilder ret = new StringBuilder();

            return System.Text.Encoding.Default.GetString(ms.ToArray());
}

 

三、參考文件

1.使用DES加密解密代碼(C# & vb.Net),已經調試成功,支持中文加解密,公佈!-WEBASP.NET

2.[C#]字串DES加解密方法 @ Kenny的程式筆記 :: 痞客邦 ::

3.C# – 簡單的加解密 | NaCl's Blog

4.[C#.NET] 字串及檔案 利用 DES / AES 演算法加解密 | 余小章 @ 大內殿堂 - 點部落


arrow
arrow
    創作者介紹
    創作者 gamer99122 的頭像
    gamer99122

    菜鳥L的手札

    gamer99122 發表在 痞客邦 留言(0) 人氣()