Javascript node.js DES encryption for unix密码哈希与mkpasswd不一样

Javascript node.js DES encryption for unix密码哈希与mkpasswd不一样,javascript,node.js,ubuntu,encryption,cryptography,Javascript,Node.js,Ubuntu,Encryption,Cryptography,我一直在尝试在node.js应用程序中创建ubuntu用户密码哈希 我会调用该函数,但我很难从节点内部找到这样做的方法。这容易做到吗?顺便说一句,在python中这相当容易(请参阅) 这就是为什么我在exec调用中使用mkpasswd-s-mdes'#{pass},获取stdout内容以访问散列,并将其传递给useradd-p#{hash}以自动生成用户。我知道,通过这种方式,密码在进程列表中是可见的。我想避免这种情况 像这样的工作命令的公共输出是 像这样的散列是我想在我的应用程序中实现的 我

我一直在尝试在node.js应用程序中创建ubuntu用户密码哈希

我会调用该函数,但我很难从节点内部找到这样做的方法。这容易做到吗?顺便说一句,在python中这相当容易(请参阅)

这就是为什么我在
exec
调用中使用
mkpasswd-s-mdes'#{pass}
,获取
stdout
内容以访问散列,并将其传递给
useradd-p#{hash}
以自动生成用户。我知道,通过这种方式,密码在进程列表中是可见的。我想避免这种情况

像这样的工作命令的公共输出是

像这样的散列是我想在我的应用程序中实现的

我一直在尝试使用
crypto
bcrypt
cryptojs
在应用程序内部创建哈希,从而避免在服务器进程列表上出现任何可见性。但是我创建的每个
DES
哈希都不起作用

例如,带有以下代码的
cryptojs
会稍微出错:

salt='这是一种盐'
结果=加密DES.加密“测试”,salt
console.log结果
输出:k0dlsddkuckoaoc
我尝试使用DES是否正确

我尝试使用DES是否正确

不,你不是
crypt()
基于DES,但它不是DES,甚至也不是基于标准DES实现

:

(crypt()函数的)传统实现使用DES算法的修改形式。用户密码被截断为8个字符,每个字符被强制压缩为7位;这形成56位DES键。然后,该密钥用于加密一个全位零块,然后用同一密钥再次加密密文,以此类推,总共进行25次DES加密。12位salt用于干扰加密算法,因此标准DES实现不能用于实现
crypt()
。salt和最后的密文以base64的形式编码为可打印字符串


如果
crypt()
是以您假设的方式实现的,则可以使用salt作为密钥来解密密码。这将使其作为密码散列完全无效。

此算法听起来非常弱-永远不要使用它。该算法不完美,特别是因为它仅限于8个字符的密码,但人们并不认为它有根本缺陷-对它的任何攻击都相当于对迭代DES的已知明文攻击,我不相信它存在。(该函数仍然存在缺陷,因为整个密码空间可能会被强制执行。)(TL;DR:不要使用DES密码哈希。)值得补充的是,搜索整个56位DES密钥空间所需的时间不到24小时,因为密钥仅由ASCII字符组成,因此搜索速度更快,至少一个数量级。@arvidkahl你最好将问题发布到SO或其附属机构。这些网站处理管理问题。
me@server:~$ mkpasswd -m des 'test'
Xnhhy1HbwhA1k