JavaScript 中的 PHP 函数 crypt()

2021-12-27 00:00:00 hash php javascript cryptojs

在服务器端,我创建了一个密码哈希:

On the server side I create a password hash:

public static function salt()
{
    return '$1$' . StringUtil::random(6, array('encode' => StringUtil::ENCODE_BASE_64));
}

public static function hash($password, $salt = null)
{
    return crypt($password, $salt ?: static::salt());
}

在客户端,我想使用 CryptoJS 做同样的事情.javascript 中是否有用于 PHP crypt() 的类似物,而 CryptoJS 则不需要?

And on client side I want to do the same using CryptoJS. Is there any analogues in javascript for PHP crypt(), not necessary with CryptoJS?

UPD:我想在客户端执行此操作,因为我不想将密码发送到服务器,但是诸如使用哈希加密的 clientId 之类的东西,在服务器上对其进行解密并获取用于下一次操作的哈希.

UPD: I want to do this on client side because I don't want to send password to server, but something like clientId crypted with hash, decrypt it on the server and get the hash for the next manipulations.

推荐答案

好吧,这里是:一个 PHP 的 crypt 的 CryptoJS 实现对于 MD5 哈希(我想它太大而无法粘贴).所以它不是一个完整的 crypt-like 东西,但在你的代码示例中你正在设置一个基于 MD5 的哈希(带有 $1$ salt 前缀).

Well, here it is: a CryptoJS implementation of PHP's crypt for MD5-hashes (I guess it's too large to paste). So it's not a complete crypt-like thing but in your code example you are setting up a MD5-based hash (with the $1$ salt prefix).

使用方法:

  1. 存储在名为 php-crypt-md5.js
  2. 的文件中
  3. 像这样使用它(rollups"在您的 CryptoJS 目录中,只需使用正确的路径):

  1. Store in a file named php-crypt-md5.js
  2. Use it like that ("rollups" is in your CryptoJS directory, just use the correct path):

<script src="rollups/md5.js"></script>
<script src="php-crypt-md5.js"></script>

<script>
    function createSalt(len) {
        var saltAlpha = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
            "abcdefghijklmnopqrstuvwxyz./-+_"

        var salt = '$1$';
        for(var i = 0; i < len; ++i) {
            salt += saltAlpha.charAt(
                Math.floor(Math.random() * saltAlpha.length));
        }

        return salt;
    }

    // in your JavaScript code:

    var salt = createSalt(8);
    var pw = "your password";

    var hash = CryptoJS.PHP_CRYPT_MD5(pw, salt);

相关文章