hmailserver帐号密码修改代码(C#)

来源:互联网 发布:服装品牌知乎 编辑:程序博客网 时间:2024/05/30 02:22

在hmailserver官方论坛搜索到hmailserver帐号密码加密方法为:先随机产生一个6位数的随机数,称为SALT,用这个SALT再加上密码(如密码abcde),得到结果SALTabcde,然后将这个结果值SALTabcde进行SHA256加密,得到一个64位密码串,再将这个密码串前面加上SALT形成70位长度的密码串再保存到数据中。官方论坛上可以搜到php做的密码修改程序,看了下挺晕头的。还是用.net的类库SHA256加密比较简单,如下是C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Data;
using System.Data.SqlClient;

using System.Security.Cryptography;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    public string strInfo;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        DBHelper db = new DBHelper();

        SqlParameter[] paras1 = new SqlParameter[]
        {
            new SqlParameter("@Email",SqlDbType.NVarChar,100),
        };

        if (tbxEmail.Text.Contains("@"))
        {
            paras1[0].Value = tbxEmail.Text.Trim();
        }
        else
        {
            paras1[0].Value = tbxEmail.Text.Trim() + "@myemaildomainexmple.com";   //这里换成你的email信箱的域名
        }

        string strPassword = db.ExecuteScaler("HM_CheckAccount", paras1, CommandType.StoredProcedure);

        if (strPassword != string.Empty)
        {
            string strSALT = strPassword.Substring(0, 6);
            if (strPassword == strSALT + GetSHA256(strSALT + tbxOldPassword.Text.Trim()))
            {
                SqlParameter[] paras2 = new SqlParameter[]
                {
                    new SqlParameter("@Email",SqlDbType.NVarChar,100),
                    new SqlParameter("@NewPassword",SqlDbType.NVarChar,70)
                };
                paras2[0].Value = paras1[0].Value;
                paras2[1].Value = strSALT + GetSHA256(strSALT + tbxNewPassword1.Text.Trim());

                bool flag = db.ExecuteNonQuery("HM_UpdatePassword", paras2, CommandType.StoredProcedure);
                if (flag == true)
                {
                    strInfo = "密码修改成功!&nbsp;<a href=\"http://mail.yourmaildomain.com\">登录邮箱</a>";
                    phdInfo.Visible = true;
                    phdErr.Visible = false;
                    phdMain.Visible = false;
                    return;
                }
                else
                {
                    strInfo = "系统错误,修改不成功!";
                    phdErr.Visible = true;
                    return;
                }
            }
            else
            {
                strInfo = "原密码不正确!";
                phdErr.Visible = true;
                return;
            }
        }
        else
        {
            strInfo = "帐户不正确或不存在!";
            phdErr.Visible = true;
            return;
        }
    }

    private string GetSHA256(string text)
    {
        byte[] hashValue;
        byte[] message = Encoding.UTF8.GetBytes(text);

        SHA256Managed hashString = new SHA256Managed();
        string hex = "";

        hashValue = hashString.ComputeHash(message);
        foreach (byte x in hashValue)
        {
            hex += String.Format("{0:x2}", x);
        }
        return hex;
    }

}