将 C# 行转换为 PHP

发布于 2024-12-10 08:16:11 字数 387 浏览 0 评论 0原文

我在 C# 中有以下函数:

    static MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();

    public string Guid GetMD5(string str)
    {
        lock (md5Provider)
        {
            return (new Guid(md5Provider.ComputeHash(Encoding.Unicode.GetBytes(str)))).ToString();
        }
    }

我需要相同的代码,但使用 PHP。 请注意,md5() 函数具有不同的行为。

谢谢

I have the following function in C#:

    static MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();

    public string Guid GetMD5(string str)
    {
        lock (md5Provider)
        {
            return (new Guid(md5Provider.ComputeHash(Encoding.Unicode.GetBytes(str)))).ToString();
        }
    }

I need the same code but with PHP.
Note that the md5() function has a different behavior.

thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

何时共饮酒 2024-12-17 08:16:11

我怀疑您遇到的问题是 C# 代码返回用破折号分隔的哈希值,因为您要将哈希值转换为 GUID,并且 GUID.ToString() 返回 M$ 所谓的“注册表格式”的字符串,这是标准的8-4-4-4-12 GUID 的字符串表示法。

如果是这种情况,您可以使用此函数获得相同的结果:

function md5_guid ($data, isFile = FALSE) {
  if ($isFile) {
    if (is_file($data) && is_readable($data)) {
      $hash = str_split(md5_file($data), 4);
    } else {
      return FALSE;
    }
  } else {
    $hash = str_split(md5($data), 4);
  }
  return "$hash[0]$hash[1]-$hash[2]-$hash[3]-$hash[4]-$hash[5]$hash[6]$hash[7]";
}


// Returns the MD5 hash of the string 'this is some data' in the format of a GUID
echo md5_guid('this is some data');

// Returns the MD5 hash of the file at 'somefile.txt' in the format of a GUID
echo md5_guid('somefile.txt', TRUE);

I suspect the issue you are having is that the C# code returns the hash separated with dashes, because you are converting the hash to a GUID, and GUID.ToString() returns the string in what M$ call "registry format", which is the standard 8-4-4-4-12 string notation of a GUID.

If this is the case, you could achieve the same result with this function:

function md5_guid ($data, isFile = FALSE) {
  if ($isFile) {
    if (is_file($data) && is_readable($data)) {
      $hash = str_split(md5_file($data), 4);
    } else {
      return FALSE;
    }
  } else {
    $hash = str_split(md5($data), 4);
  }
  return "$hash[0]$hash[1]-$hash[2]-$hash[3]-$hash[4]-$hash[5]$hash[6]$hash[7]";
}


// Returns the MD5 hash of the string 'this is some data' in the format of a GUID
echo md5_guid('this is some data');

// Returns the MD5 hash of the file at 'somefile.txt' in the format of a GUID
echo md5_guid('somefile.txt', TRUE);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文