我正在使用phpMyAdmin在MySQL中创建密码哈希表。我尝试输入的SQL代码是:
修改:使用我正在使用的新代码:
INSERT INTO `user` (`username`, `salt`, `passwordhash`)
VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'), 256)));
在SHA2之后,一切都是错误,第一个是"无法识别的关键字。 (在CONCAT附近)。"其余的人都说"无法识别的令牌"然后是任何字符串,所以看起来所有这些问题都只是由CONCAT引起的。还有另一种连接字符串的方法吗?
答案 0 :(得分:3)
根据您的新代码:您还有一个额外的括号,再次位于, 256)));
。
下面:
INSERT INTO `user` (`username`, `salt`, `passwordhash`)
VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'), 256));
这和我留下的所有评论。
修改:根据SHA2()
上的MySQL手册,以下内容可能是一个相关问题。
根据https://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_sha2
仅当MySQL配置了SSL支持时,此功能才有效。见Section 6.4, “Using Secure Connections”。 可以认为SHA2()在密码学上比MD5()或SHA1()更安全。 在MySQL 5.5.5中添加了SHA2()。
因此,请确保您使用的MySQL版本与之匹配或高于此版本。如果它低于5.5.5,则您无法使用SHA2()
。那,或者它可能是服务器上的系统管理员/安全问题。
请联系您学校的系统管理员,如果您正在运行此系统,请参阅您在评论中所说的内容 - “我正在关注一个说使用SHA2的学校教程”。无论哪种方式,MySQL版本在这里都很重要。
要检查安装的MySQL版本,请在phpmyadmin中使用以下语法:
显示像“%version%”;
的变量
而不是您使用的是SELECT VERSION();
。
答案 1 :(得分:2)
你应该有
查询错误(1582):调用本机时参数计数不正确 功能' SHA2'
这种方式对我有用
CREATE TABLE `user` (
`username` varchar(255) NOT NULL,
`salt` varchar(255) NOT NULL,
`passwordhash` varchar(255) NOT NULL
) ENGINE='InnoDB' COLLATE 'utf16_bin';
INSERT INTO `user` (`username`, `salt`, `passwordhash`)
VALUES ('username', 'a1b2c3d4e5f6g', SHA2('test',CONCAT('password', 'a1b2c3d4e5f6g')));
SELECT * FROM user;
username salt passwordhash
username a1b2c3d4e5f6g 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
username a1b2c3d4e5f6g 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
答案 2 :(得分:1)
根据MySQL文档:
SHA2(str, hash_length)
计算SHA-2系列散列函数(SHA-224,SHA-256,SHA-384和SHA-512)。第一个参数是要进行哈希处理的明文字符串。第二个参数表示结果的所需位长度,其值必须为224,256,384,512或0(相当于256)。如果任一参数为NULL或散列长度不是允许值之一,则返回值为NULL。否则,函数结果是包含所需位数的散列值。请参阅本节开头关于有效存储哈希值的注释
您需要为SHA2()
函数(哈希长度)提供第二个参数,并且此参数必须是值224,256,384,512或0之一。
INSERT INTO `user` (`username`, `salt`, `passwordhash`) VALUES ('username', 'a1b2c3d4e5f6g', SHA2(CONCAT('password', 'a1b2c3d4e5f6g'),256));