【问题标题】:php openssl encrypt data with aes256 and use a sha256 hashed pass help!php openssl 使用 aes256 加密数据并使用 sha256 散列传递帮助!
【发布时间】:2010-07-29 17:22:27
【问题描述】:

openssl 只接受一半的 sha256 哈希密码
$encryptedkey = openssl_encrypt ($data, 'AES256', "$sha256", $raw_output = false);
哈希看起来像这样:a0461cea77b9942addee32b2265b32ebcf150426e2490810938ab47206fd320b
它只接受 32 个字符:a0461cea77b9942addee32b2265b32eb
我怎样才能解决这个问题?谢谢你!

编辑:示例:在解密数据时,如果哈希值在 32 个字符后不匹配,即使它错误,它仍然会解密它

a0461cea77b9942addee32b2265b32ebcf150426e2490810938ab47206fd320b
a0461cea77b9942addee32b2265b32ebcf150426e24808019485b43406df3a9b

两者都可以在不应该的时候工作?

【问题讨论】:

    标签: php openssl


    【解决方案1】:

    我猜你应该传递原始数据,而不是它的十六进制表示。我这样说是因为 32*8=256,因此通过读取 32 个字符,函数实际上是读取 256 位。

    尝试传递pack("H*", $sha256) 而不是$sha256

    【讨论】:

    • 转换它是否安全?
      这就是它对哈希所做的:“‚•É+3�6B™Ó¤R- Kai%¡þÊnª
    • @user 当然,这只是原始表示。你可以看到,例如pack("H*", hash("sha256", "mydata")) == hash("sha256", "mydata", true).
    • 好吧,我想我明白了 $hash3 = hash('SHA256',$data2); $hash4 = pack("H*", $hash3); $hash5 = bin2hex($hash4); echo $hash5 -- 相同的 echo $hash3 -- 相同的 echo $hash4 -- "‚•É+3�6B™Ó¤R- Kai%¡þÊnª
    猜你喜欢
    • 2015-05-19
    • 2021-05-01
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    • 2021-08-27
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多