yog*_*raj 3 linux passwords openssl random
我需要生成多个随机密码,并遇到了“openssl rand -base64 14”命令,该命令内置了 base64 编码。
\n\nsh-3.2# openssl rand -base64 14\nktMgWKno9AbvRUq4wx0=\nRun Code Online (Sandbox Code Playgroud)\n\n但是,一旦生成后,我想将密码解密为可用/人类可读的格式。但是,在解码时,我只看到不可读的值。
\n\nsh-3.2# echo ktMgWKno9AbvRUq4wx0= | base64 --decode\n\xef\xbf\xbd\xef\xbf\xbd X\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdEJ\xef\xbf\xbd\xef\xbf\xbdsh-3.2#\nRun Code Online (Sandbox Code Playgroud)\n\n你们如何解密并使用这些?
\nktMgWKno9AbvRUq4wx0=在该方法中,您遇到了人类可读的格式;这正是您所需要的。
\n\n\n将密码解密为可用/人类可读的格式。
\n
一个误会。它的两个部分:
\n\nopenssl rand生成伪随机字节。无法保证它们可打印或可供人类阅读。因此,您要求(通常)编码为文本的二进制数据。ktMgWKno9AbvRUq4wx0=是人类可读的形式。您的“解密”命令(或者更确切地说“解码”;Base64 是一种编码,而不是加密)是有效的,但它为您提供了该工具在没有-base64.
您可以使用openssl rand -base64 14为您提供的密码作为人类可读的密码。我想这就是您遇到的解决方案的要点。中的每个字符ktMgWKno9AbvRUq4wx0=恰好携带原始二进制序列的 6 位熵,除了前一个字符=和它=本身:0=序列携带 4 位。总共你有 18\xc3\x976+4 位熵,这正是你要求的 14\xc3\x978 。整个字符串有 20 个字符长。为了最大化(在方法内)存储在 20 个字符中的熵,您应该至少需要 20x6 位并获取前 20 个字符。20x6 正好是 15x8,所以这个命令
openssl rand -base64 15\nRun Code Online (Sandbox Code Playgroud)\n\n将准确生成您需要的 20 个字符(无需截断)。这将是一个人类可读的字符串,其长度与所讨论的字符串相同,但其中多了 8 位熵。
\n\n我说“在方法内最大化”是因为“在方法外”可以为每个人类可读字符打包更多的熵。如果您允许使用不属于 Base64 字符集的其他字符(例如%、_、#),那么每个字符将获得超过 6 位。
您无法使用其他字符扩展该方法,因为“每个字符 6 位”就像 Base64 的基础。为了获得每个角色更多的熵,你需要一种完全不同的方法。使用全部 95 个可打印 ASCII 字符的方法将为每个字符提供大约 6.5 位的熵(严格来说:log 2 95)。
\n| 归档时间: |
|
| 查看次数: |
7501 次 |
| 最近记录: |