ASP.NET实现MD5加密算法

其实在.net 有一个最简单实现MD5的方法
         < summary >
        
/// MD5加密
        
/// </summary>
        
/// <param name="toCryString">被加密字符串</param>
        
/// <returns>加密后的字符串</returns>

         public   static   string  MD5( string  toCryString)
        
{
            
return FormsAuthentication.HashPasswordForStoringInConfigFile(toCryString, "MD5");
        }
 
public   static   string  MD5( string  str)
  
{
   MD5 md5 
= new MD5CryptoServiceProvider();
   
byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(str));
   
string str2 = "";
   
for(int i=0;i<result.Length;i++)
   
{
    str2 
+= string.Format("{0:x}",result);
   }

   
return str2;
  }

/// <summary>
  
///对字符串进行MD5编码*/
  
///返回值:编码后的MD5密码串
  
///输入:预加密的原字符串
  
/// </summary>
  
/// <param name="xStr"></param>
  
/// <returns></returns>

   public   static   string  SysEncode( string  xStr)
  
{
   
string str = "";
   
try
   
{
    
//字符串前加pz标识    
    xStr = "pz" + xStr;    
    str 
=  System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(xStr,"md5").ToString();
  
   }

   
catch
   
{    
    str 
=  "";    //error
   }

   
return str;     //返回加密后的字符串
  }

结算加密出来的结果,写java,php,asp等标准算法不同!
其实在.net 有一个最简单实现MD5的方法
/**/ /// <summary>
        
/// MD5加密
        
/// </summary>
        
/// <param name="toCryString">被加密字符串</param>
        
/// <returns>加密后的字符串</returns>

         public   static   string  MD5( string  toCryString)
        
{
            
return FormsAuthentication.HashPasswordForStoringInConfigFile(toCryString, "MD5");
        }
 
那么,从byte到字符串的标准转法怎么转呢,我看了,Quickstart用的是
BitConverter.ToString
这样标准md5写法要写成!
public   static   string  MD5( string  toCryString)
        
{
            MD5CryptoServiceProvider hashmd5;
            hashmd5 
= new MD5CryptoServiceProvider();
            
return BitConverter.ToString(hashmd5.ComputeHash(Encoding.Default.GetBytes(toCryString))).Replace("-","").ToLower();//asp是小写,把所有字符变小写
        }
 
结果加密出来的内容,和标准的一样了!
这个问题我已经解决了,在上次CSDN服务器出问题以前,我发过帖子。
因为现在在一般Asp下使用的MD5算法,使用的是老外写的一个vbScript算法,他内部使用的是16位算法,而.net算法天生就是32位的。
大概我上面的解释不对,但是可以确定一点,就是asp下的md5算法与.net下的自带算法是不兼容的。没有任何办法可以让他们所出的结果一致。
不过有个变通的法子。原理是在ms平台上,所有的脚本语言,包括vbScript,JavaScript和JScript,都是使用同一个脚本处理器,名称是ScriptHost,在微软官方下载站搜索Script56就可以找到。对这个ScriptHost,微软推出了一个Com组件,这个组件专门经过处理,可以供.net的运行库通过它可以调用并控制这个ScriptHost。
利用上面的法子,在asp.net站点上,安装这个控制器,就可以调用ScriptHost。
调用过程是,首先在
http://www.microsoft.com/downloa ... 9-9442-0BCEEF907033
处下载微软的官方ScriptHostControl控件,然后安装,安装完毕后。打开vs.net,然后在项目的解决方案资源管理器中选择项目的"引用"节点,选择添加引用,然后定位到刚才安装时选择的目录中的msscript.ocx文件。
然后把asp中,计算md5的算法代码(注意不能包含Response,Request这样的asp专用对象)复制到一个vbs文件中。在vs.net中写代码使用StreamReader类把这个vbs文件读取到一个字符串变量中,然后调用刚才的引用对象控制ScriptHost,把vbs代码赋于这个host,然后读取结果,即可得到与asp同样的结果。
我已经写好了示例文档,包括一个asp下的md5算法vbScript脚本文件,一个asp.net页面和相对的.cs文件。压缩包内还包括了ScriptControl这个ActiveX控件,如果不相信我,可以到上面的微软地址去下载。
示例下载在: http://submaie.aspsir.com/temp/CSharpRunScript.rar
ASP中MD5的加密对于英文字母或数字(既单字节),与ASP.NET中的算法结果是一样的。
不同指出是:ASP中的MD5普通是小写,.NET中是大写。
如果你的ASP加密结果是16位的,估计你使用的动网论坛的那个MD5类。动网论坛只取了,32位 MD5 的中间16位。这时候可以更改ASP的MD5类(只是最后一句话"MD5=LCase(WordToHex(b) & WordToHex(c))"改成"LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))")。实现ASP中的结果也是32位。或者取.NET加密结果的时候只取中间16位。
如果是因为双字节问题。恐怕没有什么太好的解决办法。单字节的话,无论.NET/JAVA/ASP/PHP的MD5都是一样的。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值