gpt4 book ai didi

java - Java 和 PHP 中相同的哈希算法给出不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:51 27 4
gpt4 key购买 nike

我在 java 和 php 平台上使用相同的数据库集成相同的登录功能,但在密码算法方面存在一些问题。

这是我的java代码:-

public static String encryptPassword(String strToEncrypt,String saltToEncrypt)      
{
String encryptedString = "";
String stringToEncrypt = "";
byte[] encodedValue;

stringToEncrypt = strToEncrypt + saltToEncrypt;

encodedValue = Base64.encodeBase64(DigestUtils.sha256(stringToEncrypt
.getBytes()));
encryptedString = new String(encodedValue);

return encryptedString;
}

这是我的 PHP 代码:-

  function  encryptPassword($strToEncrypt, $saltToEncrypt) 
{
$stringToEncrypt = $strToEncrypt.$saltToEncrypt;

$encodedValue = base64_encode(hash('sha256', $stringToEncrypt));

return $encodedValue;
}

理想情况下,这两个函数应该生成相同的加密字符串,但它们会给出不同的结果。我的代码有什么问题?请指教。

最佳答案

这是因为 SHA-256 函数没有使用相同的返回值格式。 PHP 中的 hash 函数默认返回十六进制字符串,但您可以选择使用 RAW_OUTPUT 参数输出原始字符串(引用 here ):

$encodedValue = base64_encode(hash('sha256', $stringToEncrypt, TRUE)); 

或者,您可以更改 Java 端并使用名为 sha256Hex 的方法在 Apache Commons Codec 中,它采用 String 并以十六进制返回哈希值:

// You don't need the getBytes here
encodedValue = Base64.encodeBase64(DigestUtils.sha256Hex(stringToEncrypt));

关于java - Java 和 PHP 中相同的哈希算法给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769123/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com