gpt4 book ai didi

javascript - 使用 browserify 从密码派生 Node 加密 key 会产生不同的结果

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:11 25 4
gpt4 key购买 nike

我正在尝试重新创建 Symfony's MessageDigestPasswordEncoder在浏览器中。

我对 browserify 和 crypto 模块有一些问题。我尝试使用 JavaScript 但不使用 Node 来生成哈希。

这是我的 Node 代码:

var crypto = require('crypto');
var encodePassword = function (raw, salt) {
var salted = raw + '{'+salt+'}',
hash = crypto.createHash('sha512').update(salted, 'utf-8');

for (var i = 1; i < 5000 ; i++) {
hash = crypto.createHash('sha512').update(hash.digest('binary')+salted);
}

return hash.digest('base64');
};

console.log(encodePassword("admin", "81b6zjhf64w8kogsgkgw804ss8gc0w0"));

它返回:

qmNs3bqtTeoS4uRq2Chh1fUNPu+lzn3KR7mWFHAq5NEPrK0QZ9XkLDUniZ39uosnozNrPL7mByzUZ/A19Io4sQ==

现在,考虑到我需要在没有 Node 的情况下实现这个,我使用了 browserify

browserify index.js > crypto.js

我创建了一个测试页面并包括:

<script src="crypto.js"></script>

控制台日志输出为:

JtDIZwGDybG6tG7PE2SeXS0BEa4vOoxpu3y7Il6P6OQL9djmrk5S0vjTGoQowGO22OvQ58tC05eZBt/yvyJv+A==

知道为什么我有两个不同的结果吗?

否则,有没有办法在纯JS(没有 Node )中获得相同的结果?

最佳答案

我不知道浏览器化代码有什么问题,但以下是 Symfonys MessageDigestPasswordEncoder 的 CryptoJS 实现.

/**
* Encodes a password according to Symfonys MessageDigestPasswordEncoder
* @param password String
* @param salt String
* @param base64 Boolean (default: false) If false, then the result is Hex-encoded
* @param hasher Optional Hasher (default: CryptoJS.algo.SHA512)
* @param iterations Optional Integer (default: 5000)
* @returns {String} Iterated and salted hash of a password
*/
function encodePassword(password, salt, base64, hasher, iterations) {
hasher = hasher || CryptoJS.algo.SHA512;
iterations = iterations || 5000;
hasher = hasher.create();
salt = password + "{" + salt + "}";
var digest = hasher.finalize(salt);
for (var i = 1; i < iterations; i++) {
hasher.reset();
hasher.update(digest);
digest = hasher.finalize(salt);
}
if (base64) {
return digest.toString(CryptoJS.enc.Base64); // Base64-encoded string
}
return digest.toString(); // Hex-encoded string
}

output.innerHTML = encodePassword("admin", "81b6zjhf64w8kogsgkgw804ss8gc0w0", true);
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/rollups/sha512.js"></script>
<script src="https://cdn.rawgit.com/CryptoStore/crypto-js/3.1.2/build/components/enc-base64-min.js"></script>
<div id="output"></div>

关于javascript - 使用 browserify 从密码派生 Node 加密 key 会产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com