4

我想知道,有没有什么办法可以hash_hmac("sha256", $token, $signkey, true)在经典的 ASP 中实现(php)?

我需要它来验证来自 Facebook https://developers.facebook.com/docs/howtos/login/signed-request/的签名请求

// Adding the verification of the signed_request below
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
if ($sig !== $expected_sig) {
  error_log('Bad Signed JSON signature!');
  return null;
}
4

3 回答 3

10

我一直在使用在亚马逊论坛上找到的文件。这是线程: https ://forums.aws.amazon.com/message.jspa?messageID=147377

它使用一个 .wsc 文件,它只是一个 JScript 文件,它定义了可以在 ASP 代码中使用的对象。像这样:

' ### be sure to have sha256.wsc in the same folder as this script
    Dim sha256
    Set sha256 = GetObject( "script:" & Server.MapPath("sha256.wsc") )
    sha256.hexcase = 0

    Dim result
    result = sha256.b64_hmac_sha256( secretkey, stringtosign )

这是一个最初用于签署对 Amazon API 的请求的文件。由于我不明白的原因,这在 .wsc 文件中包含了这行代码:

d=d.replace ( /\s/g, "\n");

这会将所有空白字符(包括空格)转换为“\n”。很难相信空格需要转换为“\n”。无论如何,我必须注释掉这一行以使代码为我工作!它确实有效。我已经使用了一段时间没有问题。

从 sha256.wsc 文件:

/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
 * in FIPS 180-2
 * Version 2.2 Copyright Angel Marin, Paul Johnston 2000 - 2009.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 * Adapted into a WSC for use in classic ASP by Daniel O'Malley
 * (based on an SHA-1 example by Erik Oosterwaal)
 * for use with the Amazon Product Advertising API
 */

sha256.wsc 文件的直接链接: https ://forums.aws.amazon.com/servlet/JiveServlet/download/9-34858-139271-2601/sha256.wsc

我一直找不到官方下载站点。

于 2013-01-04T09:18:22.103 回答
1

看看 microsoft capicom.dll。你可以下载它在这里下载

可以找到参考这里找到

另一种选择是使用 .net 类实现该功能并使该“com 可见”,以便您可以使用经典 asp 中的 .net DLL ...

于 2013-01-03T10:06:18.757 回答
0

检查我们如何在此存储库中使用加密算法的 javascript 实现:https ://github.com/ictmanagement/redsysHMAC256_API_ASP

如果你打开这个文件:https ://github.com/ictmanagement/redsysHMAC256_API_ASP/blob/master/include/dvim_apiRedsys_VB.asp ,你会发现我们如何得到与php函数相同的结果hash_hmac("sha256", $token, $signkey, true)

    '/******  MAC Function ******/
    'recibe String|WordArray , retorna WordArray
    Private Function mac256(ent, key) 
        Dim encWA
        Set encWA = ConvertUtf8StrToWordArray(ent)
        Dim keyWA
        Set keyWA = ConvertUtf8StrToWordArray(key)
        Dim resWA
        Set resWA = CryptoJS.HmacSHA256(encWA, keyWA)
        Set mac256 = resWA
    End Function
于 2016-02-19T16:42:50.633 回答