在PHP中强制字符集生成SHA-256
我试图在PHP中使用ISO-8859-1编码生成SHA-256十六进制,但没有找到方法 下面是我试图完成的“测试用例”(硬编码):在PHP中强制字符集生成SHA-256,php,hash,encoding,character-encoding,sha256,Php,Hash,Encoding,Character Encoding,Sha256,我试图在PHP中使用ISO-8859-1编码生成SHA-256十六进制,但没有找到方法 下面是我试图完成的“测试用例”(硬编码): function getHash($str) { return hash('sha256', $str); } $str1 = "Luiz"; $result1 = getHash($str1); $expect1 = '0dd0029404cbe8bbad2cd84ec0f5089e4ca29d46719323b15595ffa765a88ffe'; $
function getHash($str) {
return hash('sha256', $str);
}
$str1 = "Luiz";
$result1 = getHash($str1);
$expect1 = '0dd0029404cbe8bbad2cd84ec0f5089e4ca29d46719323b15595ffa765a88ffe';
$success1 = $result1 == $expect1 ? 'true' : 'false';
$str2 = "Luíz";
$result2 = getHash($str2);
$expect2 = '7e957af88c30f35d2fa32d6dd1c9931d3bb8a52b798277bfcbe06736f03d6828';
$success2 = $result2 == $expect2 ? 'true' : 'false';
echo "Test 1: ".$str1."<br/>";
echo "Result should be: ".$expect1."<br/>";
echo "Result is: ".$result1."<br/>";
echo "Success? ".$success1;
echo "<br/><br/><br/>";
echo "Test 2: ".$str2."<br/>";
echo "Result should be: ".$expect2."<br/>";
echo "Result is: ".$result2."<br/>";
echo "Success? ".$success2;
正如您在上面的示例中所看到的,Java版本强制散列在ISO-8859-1中。
我相信PHP实现只适用于UTF-8,但我不确定。
有什么办法吗?那不是哈什的错。它获取您传递给它的字符串中的确切字节序列,并对其进行散列。如果返回的是不同的散列值,那么文件的源代码会被破坏,因此
I
会被视为其他内容。是的,我就是这么想的。但是我如何强制PHP以预期的方式查看字符呢?即使我在字符串中强制编码(在哈希生成之前,使用mb\u convert\u encoding
),它也不起作用。在Java示例中(其工作原理与预期类似),它在生成哈希之前将字节数组转换为正确的编码。我该怎么做呢?这更多地取决于在插入角色时编辑器对文件所做的操作。可以尝试html\u实体\u解码('Luí;z','UTF-8')
或其他方法。我尝试了utf8\u解码
,成功了!不知道为什么mb\u convert\u编码没有,心想。不管怎样,问题解决了。谢谢你的帮助;D
public class TokenGenerator {
private static String getSha256Hash(final String x) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
byte[] hash = md.digest(x.getBytes("ISO-8859-1"));
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if(hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String str = "EXAMPLE_STRING";
System.out.println(getSha256Hash(str));
}
}