Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SHA-256自定义长度摘要_Java_Sql Server_Security_Sha_Sha256 - Fatal编程技术网

Java SHA-256自定义长度摘要

Java SHA-256自定义长度摘要,java,sql-server,security,sha,sha256,Java,Sql Server,Security,Sha,Sha256,我需要允许网站的老用户使用相同的凭据访问新网站。数据库服务器版本是Microsoft SQL server 2005,我没有权限对数据库进行更改。数据库的密码列设置为varchar(50),摘要为48个字符。我所掌握的关于密码的唯一信息是,它们已经用sha-256算法进行了哈希运算,但据我所知,sha-256摘要是64个字符,而不是48个字符。是否可以使用sha256生成相同的48长度摘要?仅有两个本机输出大小为192位(48hex*1byte/2hex*8bit/byte)的原始哈希函数是HA

我需要允许网站的老用户使用相同的凭据访问新网站。数据库服务器版本是Microsoft SQL server 2005,我没有权限对数据库进行更改。数据库的密码列设置为varchar(50),摘要为48个字符。我所掌握的关于密码的唯一信息是,它们已经用sha-256算法进行了哈希运算,但据我所知,sha-256摘要是64个字符,而不是48个字符。是否可以使用sha256生成相同的48长度摘要?

仅有两个本机输出大小为192位(48hex*1byte/2hex*8bit/byte)的原始哈希函数是HAVAL-192和TIGER-192。其他的都不完全匹配

如果它们确实是用sha256散列的,那么它们可能会被截断(因为十六进制编码的sha-256摘要是64个字符)

要推断出确切的情况需要一些工作。以下是几种不同的方法

  • 如果我可以访问原始源代码,我会查看它。考虑到你提出的问题,我认为这是不可能的

  • 如果我能在旧系统中写入一条记录,我会设置一个sentinel密码(或者找到一个我知道密码的帐户)。这是我知道的。然后我会从数据库中找到散列结果

    现在我们知道了
    p=password
    h=4d9e…

    从这里开始,用sha256对密码进行哈希运算,看看你得到了什么。如果幸运的话,你会很快找到一个模式(就像哈希的后半部分刚刚被切断)。如果不幸运的话,需要一些挖掘和反复尝试

    例如:

    p = "password"
    h = "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd6"
    
    结果是:
    sha256(p)[0:48]
    as
    sha256(p)=“5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a1ef721d1542d8”

    结果是:
    sha256(p)[16:48]

    等等

  • 如果我没有访问已知密码的权限,就没有办法验证这个假设。因此,如果你没有源代码,也不知道系统中的某个帐户,你基本上就是运气不佳。因此,将前两个作为你的首要任务

注意,你可能需要发挥创造力。完全有可能做了一些奇怪的事情。例如:

salt = h[0:8]
tmp = sha256(p + salt)
h = salt + (tmp[0:16] xor tmp[16:16])

所以玩得开心点:-)

SHA256摘要是32字节,如果表示为十六进制字符串,则是64字节。48字节可以是Base64编码的SHA256哈希。表中的摘要是否包含A-Z而不是A-F?@AlexK我不确定我是否正确理解了你的问题。。但表中的摘要我认为是十六进制格式的,例如c8fd968750b3303ad1bfa2ed5ad2dfe0d7a5661eef591e3a
salt = h[0:8]
tmp = sha256(p + salt)
h = salt + (tmp[0:16] xor tmp[16:16])