Sql 如何在变量中设置哈希?
我试图在变量中加密此查询的结果,即点 我得到的不是散列而是一个奇怪的符号串Sql 如何在变量中设置哈希?,sql,sql-server,Sql,Sql Server,我试图在变量中加密此查询的结果,即点 我得到的不是散列而是一个奇怪的符号串 ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] ( @pUsuario CHAR(15), @pContraseña AS VARCHAR(10), ) AS BEGIN DECLARE @ContraseñaHash varchar(70), @passwordHash varchar(70); SELECT @Con
ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] (
@pUsuario CHAR(15),
@pContraseña AS VARCHAR(10),
)
AS
BEGIN
DECLARE @ContraseñaHash varchar(70),
@passwordHash varchar(70);
SELECT @ContraseñaHash = HASHBYTES ('SHA2_256', @pContraseña) FROM UsersApp2 WHERE Usuario= @pUsuario
预期结果:0xFEED6896B729BF4A2EA5396FF3EFCB99CEB2187CA825AC8B9598D3819D1142A5
我得到的:þíh–·)J.¥9oóï™您应该使用varbinary来获得这样的结果,而不是varchar。即:
ALTER PROCEDURE [dbo].[EncriptDesEncriptPassword] (
@pUsuario CHAR(15),
@pContraseña AS VARCHAR(10),
)
AS
BEGIN
DECLARE
@ContraseñaHash varbinary(1000),
@passwordHash varchar(70);
SELECT @ContraseñaHash = HASHBYTES ('SHA2_256', @pContraseña)
FROM UsersApp2
WHERE Usuario= @pUsuario
--...
为什么希望从varchar
返回一个二进制值?HASHBYTES
,顾名思义和文档解释,会生成一个binary
类型。不看就把它塞进一个VARCHAR
,会让你得到一些莫吉贝克。如果要将十六进制字符串作为字符串,请使用。但是,请检查您是否真的需要它,或者您是否真的想要存储哈希值——在后一种情况下,您可能只想将其保存为VARBINARY
。