【发布时间】:2020-09-23 11:12:20
【问题描述】:
为了自动创建虚拟机,我从一些 Ruby 代码生成 /etc/shadow 的密码。这是在主机上完成的。主机可以是 Linux 或 Windows。
在 linux 主机上
"mypassword".crypt("$6$" + "123SaLt9")
返回
$6$123SaLt9$idgUFrrwVkpDMcoHj7SAYH0UwCY6LymbsR9yTDrelYgcZ2wstoynmLIY83qBF0/BIT4Od.rQL2g3n2jEG/VXp/
这是正确的,适用于 /etc/shadow。
但是,在一些 Windows 10 主机上(大约两周前在两个同事的机器上)返回相同的代码行
$6MrNddDu3Hf6
这显然行不通。 (在此处 https://judepereira.com/blog/use-ruby-to-generate-your-shadow-password/ 观察到 MacOS 的类似行为)
我忽略了这个函数依赖于平台(https://apidock.com/ruby/String/crypt)。除了几周前它确实有效之外,我认为我不能想当然地认为它可以在 Windows 10 主机上可靠运行。
我需要的是一种解决方案,它可以在 Linux 和 Windows 10 主机上以 MFC 格式返回正确的密码哈希。据我了解,MFC 的密码部分不仅仅是生成 SHA512 的 base64 编码结果,而是一个更复杂的过程(https://akkadia.org/drepper/SHA-crypt.txt、Using ruby to generate SHA512 crypt-style hashes formatted for /etc/shadow?)。我想避免在 Ruby 中自己实现算法。我做了几个小时的研究,但到目前为止找不到任何有用的东西。
任何想法如何在 Windows 上避免此问题,即如何独立于平台生成这些密码哈希?
【问题讨论】:
-
此类问题应包含minimal reproducible example,该minimal reproducible example 演示了在 Linux 上成功生成以及在 Windows 和 macOS 上生成失败,并通过测试验证输出。通过向我们提供示例代码,清楚地展示问题以及重现问题的步骤,使我们能够轻松地为您提供帮助。 Ruby + 加密在我的专业驾驶室中是正确的,但请不要让我从头开始学习所有让你达到这一点的东西。
-
@anothermh 非常感谢您的专业知识。我已经改写了这个问题并添加了一个例子。我希望现在更清楚了。
标签: ruby linux windows password-hash