【发布时间】:2009-06-09 03:50:56
【问题描述】:
选择 HASHBYTES('sha','这是什么') 结果--0x2327A09C2FDAD132E436B5CC12E9D5D283B5BA69 是否可以将哈希字节转换回字符串'0x2327A09C2FDAD132E436B5CC12E9D5D283B5BA69'作为输入 想要以“它是什么”的形式发布?
【问题讨论】:
标签: sql-server-2005 tsql cryptography
选择 HASHBYTES('sha','这是什么') 结果--0x2327A09C2FDAD132E436B5CC12E9D5D283B5BA69 是否可以将哈希字节转换回字符串'0x2327A09C2FDAD132E436B5CC12E9D5D283B5BA69'作为输入 想要以“它是什么”的形式发布?
【问题讨论】:
标签: sql-server-2005 tsql cryptography
绝对不是。根据定义,hash 是一种方式。
您正在寻找的是encryption,您可以使用EncryptByCert 和DecryptByCert 函数来完成,详细解释here。
【讨论】:
没有。这就是哈希的全部意义所在。
您将它们用作密码之类的东西,这样每次有人尝试登录时,您都会计算他们尝试登录的密码的哈希值(加上盐),并将其与您存储的值进行比较。这样,即使有人(例如心怀不满的员工)找到了存储您密码的数据库的备份磁带和加密密钥,他们仍然无法登录您的系统并对实时数据采取行动。
【讨论】:
哈希函数被定义为“单向”,这意味着您将文本转换为摘要(您在上面看到的结果)。如果您将其用于密码加密,则可接受的用法是通过哈希函数运行用户输入(来自他们的密码表单)并验证它是否与存储的摘要匹配。
如果您希望对提供的文本输入进行解密,您将需要研究其他加密解决方案,例如 Symmetric-key 或 Asymmetric-key 算法。
当然,如果您正在做这些,您会想要sanitize您的输入。
【讨论】:
前面的海报提到的散列,绝对是一种单向操作。它需要一个(可能很大的)输入,并以这样一种方式快速处理输入,即输出是一个小但非常独特(基于输入)的输出。由于设计和具有小输出的性质,哈希无法撤消,因为原始输入已在转换中丢失。常见的散列算法包括 Message Digest 系列(通常是 MD5)和您在问题中提到的 SHA 系列。
再次像之前的海报提到的那样,如果您正在寻找 2 路操作,那么您正在寻找加密。此外,如果您希望同一个用户同时加密和解密字符串,请坚持使用对称加密。今天在实践中使用的一些常见算法是 AES、DES 和 Blowfish。
【讨论】:
如果你有一个最小的完美哈希,那么至少你应该能够暴力破解原始输入。但大概这不是您要问的,如果这是正确的,那么请查看所有其他答案:)
【讨论】: