设为首页
加入收藏
发布文章
  首页   操作系统   系统集成   程序设计   网站设计   图形图象   安全技术   反击技术   硬件DIY   认证考试   免费资源
当前位置:中国E盟 -=> 安全技术 -=> 安全动态 -=> 正文  
使用DES加密解密代码(C# & vb.Net),已经调试成功,支持中文加解密,公布! << IIS中数据库的安全问题 | 入侵防范研究的展望 >> 
 发布日期:2006-5-28 11:16:08 发布者:[未知]  来源:[本站]  浏览:[]  评论:[ 字体:   
-----------------------------------------------
//名称空间  
using  System;  
using  System.Security.Cryptography;  
using  System.IO;  
using  System.Text;  

//方法  
//加密方法  
public    string  Encrypt(string  pToEncrypt,  string  sKey)  
{  
           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(sKey);  
           des.IV  =  ASCIIEncoding.ASCII.GetBytes(sKey);  
           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();  
}  

//解密方法  
public    string  Decrypt(string  pToDecrypt,  string  sKey)  
{  
           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(sKey);  
           des.IV  =  ASCIIEncoding.ASCII.GetBytes(sKey);  
           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());  
}  
-------------------------------------------------------
vb.Net :
-------------------------------------------------------
Imports System.Web.Security
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text

Public Shared Function Encrypt(ByVal pToEncrypt As String, ByVal sKey As String) As String
     Dim des As New DESCryptoServiceProvider()
     Dim inputByteArray() As Byte
     inputByteArray = Encoding.Default.GetBytes(pToEncrypt)
     '建立加密对象的密钥和偏移量
     '原文使用ASCIIEncoding.ASCII方法的GetBytes方法
     '使得输入密码必须输入英文文本
     des.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
     des.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
     '写二进制数组到加密流
     '(把内存流中的内容全部写入)
     Dim ms As New System.IO.MemoryStream()
     Dim cs As New CryptoStream(ms, des.CreateEncryptor, CryptoStreamMode.Write)
     '写二进制数组到加密流
     '(把内存流中的内容全部写入)
     cs.Write(inputByteArray, 0, inputByteArray.Length)
     cs.FlushFinalBlock()

     '建立输出字符串     
     Dim ret As New StringBuilder()
     Dim b As Byte
     For Each b In ms.ToArray()
         ret.AppendFormat("{0:X2}", b)
     Next

     Return ret.ToString()
End Function

        '解密方法
Public Shared Function Decrypt(ByVal pToDecrypt As String, ByVal sKey As String) As String
     Dim des As New DESCryptoServiceProvider()
     '把字符串放入byte数组
     Dim len As Integer
     len = pToDecrypt.Length / 2 - 1
     Dim inputByteArray(len) As Byte
     Dim x, i As Integer
     For x = 0 To len
         i = Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)
         inputByteArray(x) = CType(i, Byte)
     Next
     '建立加密对象的密钥和偏移量,此值重要,不能修改
     des.Key = ASCIIEncoding.ASCII.GetBytes(sKey)
     des.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
     Dim ms As New System.IO.MemoryStream()
     Dim cs As New CryptoStream(ms, des.CreateDecryptor, CryptoStreamMode.Write)
     cs.Write(inputByteArray, 0, inputByteArray.Length)
     cs.FlushFinalBlock()
     Return Encoding.Default.GetString(ms.ToArray)

End Function
------------------------------------------------
备注:
1. sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。
2. 本人asp.net1.1,vs.net2003,windows2003 server环境下C#和vb.net分别调试成功!
]]>
打印 】【 收藏 】【 推荐 】 
相关文章 推荐文章 热门文章
·暂无  ·暂无
瑞星病毒监测一周报告
使用DES加密解密代码(C# &..
防范木马 一起玩游戏网木马查杀工具版本..
病毒:谨防灰鸽子和QQ大盗
IE故障的解决方法
 评一评
正在读取…
  笔名:
  评论:
   
【注】 发表评论必需遵守以下条例:
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款

设置首页 - 加入收藏 - 关于我们 - 联系我们 - 友情连接 - -

Copyright ©2006-2008 中国E盟 Powered By:www.chinaE.org

湘ICP备05004075号