0

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

我会调用crypt(3)函数,但我很难从节点内部找到一种方法。这很容易做到吗?Afaik,这在 python 中相当容易(参见analog-perl-crypt-function-in-node-js)。

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

像这样的工作命令的常见输出是

me@server:~$ mkpasswd -m des 'test'
Xnhhy1HbwhA1k

像这样的哈希是我想在我的应用程序中实现的。

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

例如,cryptojs使用以下代码会有点错误:

  salt = 'This is a salt'
  result = crypto.DES .encrypt 'test', salt
  console.log result
  Output: K0dLSddKUcmkOaoC

我在尝试使用 DES 时是否正确?

4

1 回答 1

2

我在尝试使用 DES 时是否正确?

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

维基百科详细解释

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

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

于 2013-09-21T18:47:18.710 回答