使用Javascript来确认用PHP生成的哈希


Use Javascript to confirm a hash made in PHP?

我需要一种在PHP中创建哈希(crypt()或md5())的方法,该方法可以通过Javascript复制。

Ie。

  1. 使用PHP创建一个"你好世界"的散列(使用预先安排的私有salt)
  2. 将散列和纯文本放在两个隐藏的表单字段中
  3. 表单通过ajax提交到Node.js服务器
  4. 使用Javascript在纯文本上重复散列(再次使用私有salt),并检查散列是否匹配

JS中是否有一个本地函数或一个通用的(可靠的)第三方脚本可以用来实现这一点?我宁愿不从Node服务器调用PHP。

在浏览器中,您可以使用CryptoJS创建HMAC(基于哈希的消息验证码)。挑战将是分发你的"预先安排的私人盐"

以下是CryptoJS文档中的示例代码:

<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-md5.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js"></script>
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha512.js"></script>
<script>
    var hash = CryptoJS.HmacMD5("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA1("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA256("Message", "Secret Passphrase");
    var hash = CryptoJS.HmacSHA512("Message", "Secret Passphrase");
</script>

在Node.js上,使用Crypto模块:

require("crypto")
  .createHmac("sha256", "Secret Passphrase")
  .update("Message")
  .digest("base64");