【问题标题】:convert hash in c# to php sockets将c#中的哈希转换为php套接字
【发布时间】:2015-10-13 23:01:03
【问题描述】:

我在 C# 中有这个函数。

public static implicit operator Guid(TCPPacketReader p)
{
    byte[] tmp = new byte[16];
    Array.Copy(p.Data.ToArray(), p.Position, tmp, 0, tmp.Length);
    p.Position += 16;

    using (MD5 md5 = MD5.Create())
        tmp = md5.ComputeHash(tmp); //wtf?

    return new Guid(tmp);
}

我正在尝试在 PHP 中复制此功能。问题是当我在数组中得到这个 tmp 变量时。它返回类似:

array[5, 49, 42, 5, 254, 160, 191, 64, 79, 37, 216, 169, 201, 181, 13, 0, 59, 187]

我真的不知道如何在 php 中执行此 computeHash(tmp)。我已经用 md5() PHP 的函数尝试过它,但返回一个空对象。我用谷歌搜索了很多,但没有成功。有人知道怎么做吗?

【问题讨论】:

  • 似乎你有一个字符数组。我不是 php 专家或任何东西,但您需要先以某种方式转换为字符串,然后再将其传递给 md5()。试试 mdf(implode(" ",$array))
  • 这个数组是一个 guid 数组字节。并且 c# 中的这个函数再次转换为字符串中的 guid。我正在尝试在 php 中做同样的事情。让我们尝试这样做看看是否有效。

标签: c# php sockets hash converter


【解决方案1】:

首先:MD5.Create().ComputeHash(tmp); 使其更具可读性(在这种情况下)

C# 所做的是获取一个字节数组。 PHP 所做的就是获取一个字符串。如果您希望 PHP 的输入是字节数组,您首先必须将其转换为字符串

$tmp = md5(implode(array_map("chr", $tmp)));
// the implode and array_map turn tmp into a string, from an array containing the byte's ASCII codes (1-255)

C# md5.ComputeHash(tmp) 返回哈希的字节数组

PHP md5(tmp) 返回一个包含哈希的十六进制表示的字符串

由于您没有提供 PHP 代码,我无法回答这个问题。但这应该会让你上路。

【讨论】:

  • c# 获取字符串中的哈希并转换为字节数组 [16] 我使用 unpack("C*", {hash}) 对 php 做同样的事情,但是当我尝试使用此代码返回时,它不起作用。
  • $guid = "{4fa7189c-89a0-0500-cb1a-923d2ad914be}"; $guid = unpack("C*", $guid); //new guid : 1235210297554956579945565797484548534848459998499745575051100509710057495298101125 $newGuid = ''; foreach($guid as $g) $newGuid .= $g; md5(implode(array_map("chr", $newGuid))) // return : d41d8cd98f00b204e9800998ecf8427e
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 2013-11-13
  • 1970-01-01
  • 2018-11-08
  • 2017-10-11
  • 2019-10-27
相关资源
最近更新 更多