我在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;
}
理想情况下,这两个函数都应生成相同的加密字符串,但这些字符会产生不同的结果。 我的代码出了什么问题?请指教。
答案 0 :(得分:0)
这是因为SHA-256函数对返回值使用的格式不同。 PHP中的hash
函数默认返回十六进制字符串,但您可以选择使用RAW_OUTPUT
参数(参考here)输出原始字符串:
$encodedValue = base64_encode(hash('sha256', $stringToEncrypt, TRUE));
或者,您可以更改Java端并在Apache Commons Codec中使用名为sha256Hex
的方法,该方法采用String
并以十六进制形式返回哈希:
// You don't need the getBytes here
encodedValue = Base64.encodeBase64(DigestUtils.sha256Hex(stringToEncrypt));