您的位置:首页 > 编程语言 > C#

C#版本的备案接口pwdHash生成代码(测试通过)

2010-02-27 22:52 639 查看
C#版本的备案接口pwdHash生成代码,已经测试通过。为了方便查看,代码放到类里面去了,关键的代码就是Hex2Bin函数和EncodeBase64,EncodeBase64直接接受的就是Hex2Bin生成的字节数组
using System;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Text;
/// <summary>
///PWDHASH 的摘要说明
/// </summary>
public class PWDHASH
{
//测试函数
public string Test()
{
string Password = "123";    //用户口令
string RandStr = GetRandomString(20); //获取长度为20的随机字符串,即传递给省系统的randVal参数
return pwdHash(Password, RandStr);    //获取Hash,即传递给省系统的pwdHash参数
}

//生成Hash的函数,参数为用户口令和随机字符
public string pwdHash(string PassWord, string RndStr)
{
return EncodeBase64(Hex2Bin(MD5(PassWord + RndStr)));
}

//MD5,参数为字符串
public string MD5(string str)
{
return MD5(str, 32);
}

//MD5重载
public string MD5(string str, int code)
{
if (code == 16)
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower().Substring(8, 16);
}
else
{
return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5").ToLower();
}
}

//16进制字符串转字节数组,参数为md5后的字符串
public byte[] Hex2Bin(string str)
{
byte[] byt = new byte[16];
int k = 0;
for (int i = 0; i < 31; i++)
{
if (i % 2 == 0)
{
string HexCode = str.Substring(i, 2);
byt[k] = (byte)Convert.ToInt16(HexCode, 16);
k++;
}
i++;
}
return byt;
}

//base64编码,参数是字节数组
public string EncodeBase64(byte[] bytes)
{
return Convert.ToBase64String(bytes).ToString();
}

//获取len长度的随机字符串
public string GetRandomString(int len)
{
string Seed = "abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ0123456789";
string ReturnStr = "";
Random Rnd = new Random();
for (int i = 1; i <= len; i++)
{
ReturnStr += Seed.Substring(Rnd.Next(62), 1);
}
return ReturnStr;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 c# string hex byte random
相关文章推荐