我需要允许网站的旧用户使用相同的凭据访问新网站。数据库服务器版本是Microsoft SQL Server 2005,我没有权限对数据库进行更改。数据库的密码列设置为varchar(50),摘要为48个字符。我对密码的唯一信息是它们已经使用sha-256算法进行了哈希,但据我所知,sha-256摘要是64个字符而不是48.是否可以使用sha256生成相同的48个长度的摘要?
答案 0 :(得分:1)
本机输出大小为192位(48hex * 1byte / 2hex * 8bit / byte)的唯一两个原始散列函数是HAVAL-192和TIGER-192。其他人都没有完全匹配。
如果它们确实已经用sha256进行了散列,那么它们可能会被截断(因为十六进制编码的sha-256摘要是64个字符。
要推断确切的情况需要一些工作。以下是您可以采用的不同方法。
如果我可以访问原始源代码,我会查看它。考虑到你问了这个问题,我认为这是不可能的。
如果我可以将记录写入旧系统,我会设置一个标记密码(或找到我知道密码的帐户)。我知道的东西。然后我会从数据库中找到散列结果。
现在我们知道p=password
和h=4d9e...
。
从那里开始,只需用sha256散列密码,然后看看你想出了什么。如果你很幸运,你会很快找到一个模式(就像哈希的后半部分被切断一样)。如果你不幸运,它会进行一些挖掘和反复试验。
所以,例如:
p = "password"
h = "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd6"
结果为:sha256(p)[0:48]
为sha256(p) == "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
h = "51d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
结果将是:sha256(p)[16:48]
等等。
如果我无法访问已知密码,则无法测试该假设。因此,如果您没有源代码,并且不了解系统中的帐户,那么您基本上不会运气。因此,将前2个作为首要任务。
请注意,您可能需要发挥创意。完全有可能做了一些奇怪的事情。如:
salt = h[0:8]
tmp = sha256(p + salt)
h = salt + (tmp[0:16] xor tmp[16:16])
所以玩得开心: - )