以下有我的一段代码.是用ASP写的,但我希望能把它翻译成C#的表达方式:
  "  
If Cint(Dvbbs.Forum_Setting(23))=1 Then
Randomize
Do While Len(rndnum)<8
num1=CStr(Chr((57-48)*rnd+48))
rndnum=rndnum&num1
loop
pass2 = rndnum
password=md5(rndnum,16)
Else
If Request.form("psw"&fname)="" or len(Request.form("psw"&fname))>10 or len(Request.form("psw"&fname))<6 Then
ErrCodes=ErrCodes+"<li>"+template.Strings(13)
Else
pass1=Request.form("psw"&fname)
End If
If Request.form("pswc"&fname)="" or strLength(Request.form("pswc"&fname))>10 or len(Request.form("pswc"&fname))<6 Then
ErrCodes=ErrCodes+"<li>"+template.Strings(13)
Else
pass2=Request.form("pswc"&fname)
End If
If pass1<>pass2 Then
ErrCodes=ErrCodes+"<li>"+template.Strings(29)
Else
password=md5(pass2,16)
End If
End If
  "
    这个是ASP写的一个注册的加密密码代码,我希望哪位懂ASP和c#的高手能帮忙翻译一下.翻译过来的MD5加密要求和以上ASP的加密结果一样.    我对它做了相应的修改,但是得到的加密结果不一样,最开始是位数不一样,后来位数一样了,但加密的结果还是不同.分不多,但希望高手还是能帮忙解决!

解决方案 »

  1.   

    其实.net 自己带的类库就有MD5了详细查看MSDN。。

    using System.Security.Cryptography;       public static string MD5_32(string value)
            {
                byte[] bytes = Encoding.ASCII.GetBytes(value);
                byte[] hashvalue = (CryptoConfig.CreateFromName("MD5") as HashAlgorithm).ComputeHash(bytes);            StringBuilder text = new StringBuilder();
                for (int i = 0; i < 16; i++)
                    text.Append(hashvalue[i].ToString("x").PadLeft(2,'0'));            return text.ToString();
            }
      

  2.   

        public static string MD5(string strInput)
        {
            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(strInput));//data是不是你要的?
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sb.Append(data[i].ToString("X2"));
            }
            return sb.ToString();//返回值是不是你要的?
        }
    上面是自己写得MD5函数,.net类库用来非常简单,不过不知道你的asp程序里的参数定义,尤其是那第二个参数16不太确定。
    我这里用的MD5.asp输出32个字符,和我这个函数的输出一致。
    你呀,跟踪调试一下,加个断点,就知道那个地方的输出是你要的就行了。
      

  3.   

    根据你的情况改造上面的函数。
    你的asp程序部分,很好改,基本就是语法转换,没有难度的
      

  4.   


    private static byte[] MD5hash(byte[] data)
        {
            // This is one implementation of the abstract class MD5.
            MD5 md5 = new MD5CryptoServiceProvider();        byte[] result = md5.ComputeHash(data);        return result;
        }    #region 加密密码
        /// <summary>
        /// 加密密码MD5
        /// </summary>
        public static string EncryptPassWord(string parpass)
        {
         
            string enpassword = "";        byte[] b = System.Text.Encoding.Default.GetBytes(parpass);
            byte[] c = MD5hash(b);
           
            for (int i = 0; i < c.Length; i++)
            {
                enpassword += c[i].ToString("x").PadLeft(2, '0');
            }        return enpassword;
        }
        #endregion.net 2.0
      

  5.   

    上面的那个那个方法加密出来的结果个16位的密文.而上面调用的那个MD5的方法与我在C#中的一样(两个不同的MD5.CS,一个适用与ASP,一个适用与c#).string SysKey = MD5.Encrypt(userpwd,16);(SysKey就是加密后的结果)两种结果我不一样.我是个ASP文盲,根本对它如何该,一点都不懂.希望我所说的一些零碎的语言对各位帮我解决这个问题有些帮助.
      

  6.   

    把原来的编译成DLL,在.NET中调用不就成了
      

  7.   

    你的asp代码没有贴全md5(rndnum,16)
    这个md5的方法里面才是md5的核心,你这个没有贴出来如果你想用.net实现md5加密的话,.net自带了类库就可以实现System.Security.Cryptography 查msdn