gpt4 book ai didi

c# - 从 C#.net 2.0 迁移到 php 所以密码的哈希值 - 如何解析?

转载 作者:太空宇宙 更新时间:2023-11-03 11:54:30 26 4
gpt4 key购买 nike

我们之前使用 C#.net 2.0 创建网络应用。

使用以下代码对用户密码进行哈希处理并存储在数据库中。

private const string encryptionKey = "AE09F72B007CAAB5";

HMACSHA1 hash = new HMACSHA1();
hash.Key = HexToByte(encryptionKey);
encodedPassword = Convert.ToBase64String(
hash.ComputeHash(Encoding.Unicode.GetBytes(password)));

现在我们打算迁移到 php。

所以当用户想要返回时,我们会遇到一个问题。

应该使用哪个 php 等效方法,以便数据库中的散列值起作用?

例如编码密码是pa55w0rd得到的哈希值为 oK9NOVhpTkxLoLfvh1430SFb5gw=

谢谢。

最佳答案

在您的 C# 应用程序中,您以两种不同的方式生成 byte[] 数组,结果略有不同。您的 PHP 脚本需要准确模拟它们。

hash.Key = HexToByte(encryptionKey)
你传入一个 16 个字符长的字符串并得到一个 8 字节的数组,就像 hash.Key = new byte[]{0xAE, 0x09, 0xF7, 0x2B, 0x00, 0x7C, 0xAA, 0xB5 }; 但是
string password = "pa55w0rd";
byte[] b = Encoding.Unicode.GetBytes(password)
由于 Encoding.Unicode,返回包含 16 个元素的数组,例如 byte[] b = { 0x112, 0x0, 0x97, 0x0, 0x53, 0x0, 0x53, 0x0, 0x119, 0x0, 0x48, 0x0, 0x114, 0x0 ,0x100, 0x0}
在您的 php 脚本中,您可以使用 $data = mb_convert_encoding($password, 'UTF16-LE') 将 $password 的编码更改为 utf-16le。达到类似的结果。 hash_hmac() 不知道任何编码会将字符串视为 16 字节的单字节编码字符串,就像 .net 中的 hash.ComputeHash(byte[]) 一样。

<?php
$password = "pa55w0rd";
$key = HexToBytes("AE09F72B007CAAB5"); // 8 bytes, hex<p></p>

<p>// $to must be 'UTF-16LE'
// $from depends on the "source" of $password
$data = mb_convert_encoding($password, 'UTF-16LE', 'ASCII');</p>

<p>// I've saved this script as an ascii file -> the string literal is ASCII encoded
// therefore php's strlen() returns 8 for $password and 16 for $data
// this may differ in your case, e.g. if the contents of $password comes from a
// http-request where the data is utf-8 encoded. Adjust the $from parameter for
// mb_convert_encoding() accordingly
echo 'Debug: |data|=', strlen($data), ' |password|=', strlen($password), "\n"; </p>

<p>$h = HexToBytes(hash_hmac('sha1', $data, $key));
echo 'hmac-sha1: ', base64_encode($h);</p>

<p>function HexToBytes($s) {
// there has to be a more elegant way...
return join('', array_map('chr', array_map('hexdec', str_split($s, 2))));
}</p>
版画
Debug: |data|=16 |password|=8hmac-sha1: oK9NOVhpTkxLoLfvh1430SFb5gw=

关于c# - 从 C#.net 2.0 迁移到 php 所以密码的哈希值 - 如何解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1017150/

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