【发布时间】:2018-04-11 20:01:33
【问题描述】:
我正在尝试创建一个散列密码输入的 SQL 过程。此代码不会运行,而且我没有收到任何有用的响应错误。
第一部分创建表,第二部分创建过程。当我在第三部分调用我的程序时,它会将值发送到程序中。那里的密码应该使用 SHA2_512 进行哈希处理,并插入到我们制作的表格中。
我使用在线研究制作此代码,我没有得到的部分是:
我的价值观之前的 N
SetNoCount
@responsemessage
-- makes Admin table
CREATE TABLE IF NOT EXISTS `AdminUser` (
`AdminID` smallint(6) NOT NULL AUTO_INCREMENT,
`Username` char(15) NOT NULL,
`PasswordHash` BINARY(64) NOT NULL,
`Fornavn` char(30) NOT NULL,
`Etternavn` char(40) NOT NULL,
`Email` char(40) NOT NULL,
PRIMARY KEY (`AdminID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Makes hashing procedure
CREATE OR REPLACE PROCEDURE vm_ski.addAdmin
@pUsername NVARCHAR(50),
@pPassword NVARCHAR(50),
@pFornavn NVARCHAR(30),
@pEtternavn NVARCHAR(40),
@pEmail NVARCHAR(40),
@responseMessage NVARCHAR(250)='' OUTPUT
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
INSERT INTO vm_ski.AdminUser (Username, PasswordHash, Fornavn, Etternavn, Email)
VALUES(@pUsername, HASHBYTES('SHA2_512', @pPassword), @pFornavn, @pEtternavn, @pEmail)
SET @responseMessage='Success'
END TRY
BEGIN CATCH
SET @responseMessage=ERROR_MESSAGE()
END CATCH
END;
-- Admin example
DECLARE @responseMessage NVARCHAR(250)
EXECUTE vm_ski.addAdmin
@pUsername = N'sondre',
@pPassword = N'example'
@pFornavn = N'Sondre'
@pEtternavn = N'Morgendal'
@pEmail = N'sondre.example@gmail.com'
;
【问题讨论】:
-
因为
HASHBYTES('SHA2_512', @pPassword)不是 MySQL 函数。在 MySQL 中,您需要使用SHA2(@pPassword, 512)...而且您不应该使用 SHA512 哈希,因为它是一种快速哈希算法,并且互联网上有 GB 的现有彩虹表可以将 SHA512 哈希反转为密码在 SHA512 哈希中不使用盐的秒数... -
我明白,但我目前正在学习,所以我只需要在更改我的哈希方法之前让它工作。它仍然不起作用,我担心还有另一件事在出错
-
“我改变了我的哈希方法。它仍然不起作用,”是的,因为
CREATE OR REPLACE PROCEDURE也是 SQL-server 语法.. MySQL 不支持 REPLACE 子句.. MySQL 也不支持带有CREATE PROCEDURE语句的OUTPUT子句...N'sondre.example@gmail.com'前面的N 也是SQL-server 语法。ERROR_MESSAGE()也是SQL-server 函数... -
你不懂。您仍在使用 SQL Server 的特定功能和 MySQL,您仍在尝试使用数据库进行哈希处理。如果你不明白不能随意将 SQL server 函数与 MySQL 混合,那你怎么能理解任何事情呢?这个密码散列问题已经一次又一次地解决了——你甚至有谷歌、stackoverflow、一台带键盘的电脑。用它来找出其他人做了什么,你会发现很多解释和推理。你的方式 - 糟糕。
-
哈哈,习惯了网上求助被人骂,没问题。我知道你们中的大多数人是好意的。我没有意识到我使用的多个命令与 MySQL 不兼容。此外,我遵循以下建议并在 PHP 中进行哈希处理以获得更好的安全性。谢谢你教我:)