如何在NODE.JS上模仿php crypt()

时间:2013-03-05 13:46:51

标签: php javascript node.js encryption des

请帮助php - > javascript(node.js)转换

$key = crypt($key, $salt);

我正在用node.js重写php脚本,我在php中遇到了哈希签名生成,这是使用crypt()函数和盐匹配“CRYPT_EXT_DES”模式生成的

  

CRYPT_EXT_DES - 基于DES的扩展哈希。 “salt”是一个9个字符的字符串,由下划线后跟4个字节的迭代计数和4个字节的盐组成。它们被编码为可打印字符,每个字符6位,最不重要字符。值0到63编码为“./0-9A-Za-z”。在salt中使用无效字符将导致crypt()失败。

我对加密并不熟悉,在crypto模块上研究node.js文档并没有帮助。请帮助如何在node.js上实现它!

3 个答案:

答案 0 :(得分:0)

crypt(3)库似乎可以正常工作。

例如:

with tmp as (
select
    event_id,
    jsonb_array_elements(attendees) ->> 'username' as user_name
from
    events
)
select
    event_id,
    count(1)
from
    tmp
where
    user_name like 'j%'
group by
    event_id
order by
    event_id;
 event_id | count 
----------+-------
        1 |     2
        2 |     1
        3 |     1
(3 rows)

然后测试存储的哈希...

const crypt = require( 'crypt3/sync' ),
      key = "password",
      hash = crypt( key, crypt.createSalt( 'sha512' ) );

(我知道晚了六年)

答案 1 :(得分:0)

您可以使用https://github.com/thomas-alrek/node-php-password

var Password = require("node-php-password");

var options = {
    cost: 10,
    salt: "qwertyuiopasdfghjklzxc"
};
const hashedPassword = Password.hash(password, "PASSWORD_DEFAULT", options);

这将与php中的结果相同

crypt(password,'$2y$10$'.'qwertyuiopasdfghjklzxc'.'$')

答案 2 :(得分:-1)

如果您正在寻找JavaScript中PHP的crypt()的确切实现,您可能需要查看:

http://phpjs.org/functions/get_extension_funcs/ - 这是一个试图将所有PHP函数移植到JavaScript的项目。

希望这有帮助