在mssql中以安全形式插入密码的插入查询是什么?

时间:2017-07-01 08:17:22

标签: sql-server

我正在使用以下的quires

Create table UserDetails
(
    UserId int primary key identity(1,1),
    UserName nvarchar(50) Not Null,
    UserContactNumber int Not Null,
    UserEmail varchar(50) Not Null,
    UserPassword nvarchar(50) Not Null,
    UserConfirmPassword nvarchar(50) Not Null
) 

Insert into UserDetails 
values ('Shefali',36547895,'s.jain@gmail.com',HASHBYTES('MD5','Shefali1234$')
,HASHBYTES('MD5','Shefali1234$'))

结果:

+---+---------+----------+------------------+---------------+---------------+
| 1 | Shefali | 36547895 | s.jain@gmail.com | ꉹ㇒ᆔ唡鈑쳕켆� | ꉹ㇒ᆔ唡鈑쳕켆�  |
+---+---------+----------+------------------+---------------+---------------+

1 个答案:

答案 0 :(得分:0)

HASHBYTES为MD5 (Microsoft Docs)返回VARBINARY(16)。你所看到的是正确的,你所期待的是什么,但是BINARY(16)会给你一些更好看的东西。您不会尝试从数据库中获取密码,而是在Web服务器上进行哈希并根据哈希值进行测试。

此外,您无需同时存储密码和密码确认。它应该足以在它们被存储之前测试它们是否匹配,可能是在前端的javascript中。

此外,请确保您正在做的是您想要做的事情。 MD5不被视为安全。例如 https://codahale.com/how-to-safely-store-a-password/ 如果您使用bcrypt,可以将其存储在BINARY(60)中,如https://stackoverflow.com/a/5882472/2281968