我遇到了在PHP和C#.Net中匹配SHA1算法的问题。我需要修改PHP代码以匹配.Net值。
.Net中的代码如下:
DateTime dtNow = DateTime.parse("4/29/2013 11:50:18 PM");
//Create the site token header
var siteTokenMessageHeader = new SiteTokenMessageHeader
{
MessageId = "0289ED53-D69B-451C-BCBB-C7412D07AFFE",
//Unquie Id per message, use for auditing
TimeStamp = dtNow,
//Current Time
SiteId = _siteId,
};
//Construct Token
var token = string.Format(
"{0}:\"MessageId\":\"{1}\"\"SiteId\":\"{2}\"\"TimeStamp\":\"{3}\"",
_siteKey,
siteTokenMessageHeader.MessageId,
siteTokenMessageHeader.SiteId,
siteTokenMessageHeader.TimeStamp.ToString(new CultureInfo("en-US"))); //1/1/2000 12:00:00 AM
//Construct signature from token
var shaProvider = new SHA1Managed();
var rawKey = Encoding.Unicode.GetBytes(token);
var rawHash = shaProvider.ComputeHash(rawKey);
var signature = BitConverter.ToString(rawHash).Replace("-", "").ToLower();
siteTokenMessageHeader.SiteSignature = signature;
签名变量值:8cf9000e9b1a6da0e898bada5bf6dd8f6d17d72a
PHP代码如下:
$str = $SiteKey.':"MessageId":"0289ED53-D69B-451C-BCBB-C7412D07AFFE""SiteId":"'.$SiteId.'""TimeStamp":"4/29/2013 11:50:18 AM"';
$hash = sha1($str);
$ hash变量值:1d2fb85fd63a14de0b5e0a95be253eac1a625128
相同的主题已被回答了很多次,但在这种情况下,这些都没有帮助。 任何人的帮助都会很明显。
答案 0 :(得分:1)
请在AM
PHP
""TimeStamp":"4/29/2013 11:50:18 AM"'
^^
PM
C#
parse("4/29/2013 11:50:18 PM");
^^
因此,会有不同的结果。
同时将其设为AM
或PM
,您将获得相同的哈希值。
答案 1 :(得分:1)
有几个问题:
AM
与PM
)由于代码被破坏,您需要在两侧进行更改。我建议使用UTF-8编码的消息切换到HMAC-SHA-2
。