教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> .NET类 >> ASP.NET >> 使用DES加密解密代码(C# & vb.Net),已经调试成功,支持中文加解密,公布! RSS订阅
使用DES加密解密代码(C# & vb.Net),已经调试成功,支持中文加解密,公布!
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
C#
-----------------------------------------------
//名称空间  
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分别调试成功!


来源:upschool.com.cn
作者:
关键字:amp,vb.Net,已经调试成功,支持中文加解密,公布
发表日期:2005-12-23

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:检测是否还有黑客代码的asp.net函数 ouwx(原作)   下一篇:dotnet反编译工具


本文的相类似文章
  • 轻松调整VB.NET控件
  • 使用VB.NET中的动态属性
  • 用新VB.NET 枚举提高效率
  • VB.NET中的变量范围差异
  • VB.NET窗体操作技巧两则
  • VB.NET开发扫描客户端服务工具
  • 消息队列在VB.NET数据库开发中的应用
  • 用VB.NET轻松制作特效窗体
  • VB.NET:给Visual Basic带来革命
  • VB.net 编码规范(也适用于C#)
  • 网友评论 查看本文全部评论
    笔 名: *
    评 论:
    最多500字。当前字数:0
    联系方式:
    验证码:
    在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com