有啥方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用?

Posted

技术标签:

【中文标题】有啥方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用?【英文标题】:Is there any way to use dbo.HashPasswordString() of SQL Server with PHP similar to md5()?有什么方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用? 【发布时间】:2020-10-14 01:22:59 【问题描述】:

我正在尝试创建一个注册和登录表单。使用 SQL Server,我可以这样做:

SELECT Account, Password
FROM USER
WHERE Account = ? and Password = dbo.HashPasswordString(?)

但是,我想要做的是一个 php 函数来处理散列而不在查询中使用 dbo.HashPasswordString()。 SQL Server 的HashPasswordString() 似乎不是MD5,所以我不能像PHP 中的md5() 函数那样做。是否有任何类似于 SQL Server 中的 PHP 函数,所以我可以在 PHP 中对其进行哈希处理,然后再将其插入到查询中。

【问题讨论】:

tsql中没有这个功能。 chinese references 指向该名称的用户定义 CLR 函数。您应该向负责此数据库的人员询问该功能及其实现方式。 【参考方案1】:

SQL Server 使用 HASHBYTES,您可以将其指定为使用 MD5,例如 HASHBYTES ('md5', 'ABCDE')

请注意,您需要非常注意 SQL Server 中的数据类型 - VARCHAR 的 HASHBYTES 和 NVARCHAR 之一将提供不同的结果,例如,SQL Server HASHBYTES different values

【讨论】:

嗯,问题是我的应用程序已经使用了如下格式的密码:U7796T13422FA0,这显然不是 MD5 哈希。它使用标准的 dbo.HashPasswordString()。有什么办法仍然可以完成你在php中所说的吗? 我不认为这是 SQL Server 中的标准功能(尝试谷歌搜索)。它可能是用户定义的功能或类似功能?值得检查算法,因为你需要在 PHP 中镜像它。 如果我直接从 SQL Server 管理工具中使用以下内容创建一个新帐户:INSERT INTO table (Account,Password) VALUES('TestAccount',dbo.HashPasswordString('MyPassword'),那么我的应用程序会识别该帐户。有用。我刚刚安装了 MSSQL Server 2017 并没有对其进行任何更改。所以,这就是我试图在 PHP 中完成的,但不确定是哪种哈希格式。我认为这是 SQL Server 的标准。 嗯。它不在我的身上。但是,函数存储在数据库中,想必您恢复了以前的数据库以获取当前数据库?要确认,您可以尝试创建一个新的空数据库(其中不必包含任何内容),然后在其中运行 SELECT dbo.HashPasswordString('MyPassword') 你是对的。它在 Functions 中,因为我恢复了数据库。所以,在我找到这个函数之后(它不是一个大函数:))我将不得不看看它是如何工作的,并在 php 中做一些类似的事情。此外,在查询中使用具有此类功能的参数化语句是否安全?我想这不是问题,只是在sql注入和安全方面询问。

以上是关于有啥方法可以将 SQL Server 的 dbo.HashPasswordString() 与类似于 md5() 的 PHP 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server - 有啥方法可以找到哪些存储过程返回集合,哪些不返回?

SQL Server如何更改系统用户dbo的所属账号

SQL Server Agent有啥作用 怎样用它

有啥方法可以创建与 SQL Server 2005 中的视图具有相同布局的表?

我可以在没有 [dbo] 的情况下调用 SQL Server 2005 中的函数吗?

sql server post方法