在PHP中相当于C#Encoding.UTF8.GetBytes

问题描述 投票:2回答:1

我在C#中有一个例子,必须在PHP中编写相同的代码。

request = request.Replace(sign, string.Empty);

byte[] sha1Request;
using (var shaM = new SHA1Managed())
{
    sha1Request = shaM.ComputeHash(Encoding.UTF8.GetBytes(request));
}
log.InfoFormat($"request={request}. sha1Request={Convert.ToBase64String(sha1Request)}. Sign={sign}", request, Convert.ToBase64String(sha1Request));
var pubKey = (RSACryptoServiceProvider)FrontInterface.GetCertificate(checkFrontCertificateCod.Value).PublicKey.Key;
var isValid = pubKey.VerifyData(Encoding.UTF8.GetBytes(Convert.ToBase64String(sha1Request)), new SHA1CryptoServiceProvider(), Convert.FromBase64String(sign));
if (!isValid)
{
    throw new Exception("Wrong digital sign");
}

所以,我可能不会在PHP中将字符串转换为字节,并且行sha1Request = shaM.ComputeHash(Encoding.UTF8.GetBytes(request));将在PHP中:sha1Request =sha1(request, true);我是否操作?如果没有,请帮我转换PHP这一行。非常感谢。

c# php
1个回答
1
投票

请注意,sha1不应该再用于安全相关的应用程序,它已经过时了。

C#版本:

string text = "<Hällo World>";

byte[] sha1;
using (var shaM = new SHA1Managed())
{
    sha1 = shaM.ComputeHash(Encoding.UTF8.GetBytes(text));
}
string encoded = Convert.ToBase64String(sha1);

Console.Write(encoded);

PHP版本:

$text = "<Hällo World>";

// Encode as UTF8 if necessary (May not be necessary if string is already utf-8)
$text = utf8_encode($text);

// Calculate SHA1 
$sha1 = sha1($text, TRUE);

// Convert to Base64
$encoded = base64_encode($sha1);

echo($encoded);

两个版本都应输出

1nSiStZRa / quRru7Sqe ejupqfs + =

请注意,只有当您使用的字符串实际上没有在utf8中编码时,才应该调用utf8_encode

如果字符串是* .php文件中的文字,则这取决于文件在磁盘上的存储方式。 (它使用什么字符集)。

如果从Web请求或数据库或从读取文件中检索字符串,这还取决于Web表单,数据库或外部文件使用的字符集。

© www.soinside.com 2019 - 2024. All rights reserved.