You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SHA256哈希校验登录时遇浮点数超8字节范围错误的解决咨询

解决SHA256哈希密码校验时的浮点数值超出范围错误

在使用SHA256哈希密码后,与数据库校验登录信息时出现错误:'浮点数值'5E884898'超出计算机(8字节)表示范围',以下是问题原因和解决方法:

问题原因

直接拼接SQL语句时,未给字符串类型的userName和userPassword添加单引号,数据库会将哈希值中类似5E884898的片段识别为科学计数法表示的浮点数,而该数值超出了8字节浮点数的存储范围,触发报错。同时这种拼接方式还存在严重的SQL注入风险。

解决方法

使用参数化查询替代字符串拼接,既可以解决浮点数识别问题,也能彻底避免SQL注入。同时修正代码中读取字段的逻辑错误(原代码查询userPassword却读取userName字段)。

修正后的代码

static string hashPassword(String password)
{
    string hashedResult = "";
    using (SHA256 sha256 = SHA256.Create())
    {
        byte[] hashedValue = sha256.ComputeHash(Encoding.UTF8.GetBytes(password));
        foreach (byte h in hashedValue)
        {
            hashedResult += $"{h:X2}";
        }
    }
    return hashedResult;
}

bool loginCheck(string userLogin, string hashedPassword)
{
    // 使用using管理连接生命周期,自动释放资源
    using (SqlConnection connection = new SqlConnection("你的数据库连接字符串"))
    {
        connection.Open();
        // 参数化SQL语句,避免字符串拼接引发的类型识别问题
        string loginCheck = "SELECT 1 FROM logins WHERE userName = @userName AND userPassword = @userPassword";
        using (SqlCommand loginChecker = new SqlCommand(loginCheck, connection))
        {
            // 明确指定参数类型与长度,确保数据库正确识别为字符串
            loginChecker.Parameters.Add("@userName", SqlDbType.VarChar, 255).Value = userLogin;
            loginChecker.Parameters.Add("@userPassword", SqlDbType.VarChar, 255).Value = hashedPassword;
            
            // 用ExecuteScalar直接判断是否存在匹配记录,提升查询效率
            object result = loginChecker.ExecuteScalar();
            return result != null;
        }
    }
}

补充说明

  1. 原代码中查询字段与读取字段不匹配的逻辑错误已修正,改用ExecuteScalar只需判断是否存在结果,无需遍历读取数据。
  2. 你的SQL表结构设计符合需求:
CREATE TABLE logins (
loginID INT PRIMARY KEY IDENTITY (1,1),
userName varchar(255),
userPassword varchar(255),
priorityLevel int
)

SHA256哈希后的字符串固定为64位长度,varchar(255)完全满足存储需求。

内容的提问来源于stack exchange,提问作者Charlie Gale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 18:15:05