无需密钥即可在 Windows 10 上部署加密密码

无需密钥即可在 Windows 10 上部署加密密码

我之前一直使用 mkpasswd 在 Linux 上加密密码,并将其传送到 chpasswd 来设置新用户的密码。

我在一台机器上独立运行 mkpasswd:

$ printf "s£cr3t" | mkpasswd --stdin --method=sha-512 --salt "salt"

然后将加密的密码与脚本一起部署以设置密码。

printf "user:-the-encrypted-password-" | sudo chpasswd --encrypted

因此原始的纯文本密码从未被部署。

是否可以在 Windows 10 上做类似的事情?我一直在阅读 Powershell 的 ConvertTo-SecureString 和 ConvertFrom-SecureString,但如果我不使用密钥,它只能在同一台机器上工作。如果我使用密钥,我还必须部署密钥,这就像纯文本密码一样糟糕。

总之 - 我想在 Windows 10 上部署一个加密密码,可以存储而无需解密。

答案1

需要注意的是,密码通常不是加密(这意味着可逆函数)而是哈希(不可逆)。因此,SecureString其配套 cmdletConvertTo-SecureStringConvertFrom-SecureString都毫无用处 — 它们仅处理可逆加密。

您需要的 SHA-512 哈希值也只是方程式的一部分。由于彩虹表的存在,正确使用密码哈希值需要额外的随机组件,称为(您不应手动传递盐,因为弱值可能会损害整体加密强度。)

让我们看一下mkpasswd --method=sha-512输出(对于密码“banana”),它也可能以/etc/shadow这样的方式出现:

$6$mcD2hLIMJToO/6p.$BOERIGcczwhLazvF3LWumZCsNPE1LQ4dnPp4vZmevgHCNV/FuPTBb.7whQf5PVGa3S2pRpIP1Tiy1CzzuA/271

有多个组成部分,以美元符号分隔:

  • 6,该方案(SHA-512);还存在其他各种方案
  • mcD2hLIMJToO/6p.,盐
  • BOERIGcczwhLazvF3LWumZCsNPE1LQ4dnPp4vZmevgHCNV/FuPTBb.7whQf5PVGa3S2pRpIP1Tiy1CzzuA/271,实际哈希

该算法是记录在这里。从技术上讲,只要有所需的加密函数,就可以用任何合理的语言(包括 PowerShell)实现这一点。但是,这很复杂,所以不要费心。验证密码的相关问题在 Stack Overflow 上,它链接到C# 实现。你可以用它。


既然我们确定你不会在 PowerShell 中执行此操作,那么解决方案是什么?使用mkpasswd!在 Windows 上运行 Linux 工具的方法有很多种。最明显的是 WSL。只需使用真品™。完整的虚拟机也是一种可能。此外,OpenSSL 也可以做到这一点,Windows 版本可用。

相关内容