【问题标题】:How to generate openssl blowfish without certain characters or allow certain set of characters如何生成没有某些字符或允许某些字符集的openssl河豚
【发布时间】:2021-04-08 04:49:26
【问题描述】:

我有以下 bash 脚本可以自动将河豚插入 config.inc.php 以供 phpMyAdmin 使用:

#!/bin/bash

randomBlowfishSecret=$(openssl rand -base64 32)
echo "BlowFish Value: ${randomBlowfishSecret}"
replace_pma_blowfish="\$cfg['blowfish_secret'] = '${randomBlowfishSecret}'; \/* YOU MUST FILL IN THIS FOR COOKIE AUTH! *\/"
sed -i "s/\$cfg\[.blowfish_secret.\]\s*=.*/${replace_pma_blowfish}/" /var/www/html/phpMyAdmin/config.inc.php

它可以工作,但如果河豚键包含这个字符'/',我会得到如下 sed 错误:

root@test:./test
BlowFish Value: omaRJZpTeWZPQU+dqDc7UlrXZnL6j8i0wSE/3kTnjLU=
sed: -e expression #1, char 99: unknown option to `s'

有没有办法生成 openssl 32 字符而没有这个字符 '/' 或者我们如何允许 openssl 中的某些字符集像这组字符:

!#%+23456789:=?@ABCDEFGHJKLMNPRS

为了防止脚本中的错误,我想避免使用某些字符,例如 '/' '$' 和其他字符。我知道转义斜线是有效的,但我不想使用这个字符,因为它会与另一个代码有错误,我不想更改其他代码一个例子就是圆形立方体,它不会接受字符':' 和 '@' 我认为这个字符 '/' 也会有其他代码的问题。所以我不想让openssl生成这个字符'/'

要求:

  1. 允许一些特殊字符,如'[' ']' '?'并避免使用一些字符,例如 '/' '$'
  2. 密码长度为 32

【问题讨论】:

  • s/// 语法切换到 s|||,例如见:Escaping forward slashes in sed command
  • 我的意思是我真的不想在密码中包含那个斜杠,只想要没有 '/' 的密码,如果我知道如何在没有 '/' 的情况下生成 openssl,我可以尝试排除其他字符,因为我知道还有一些其他字符会导致此错误(并非所有特殊字符都应排除)
  • 似乎链接正在谈论使用 sed 将“/”替换为其他一些字符,但这不是完全随机的密码,对吧?另外,我真的不想在 openssl 密码中使用某些特殊字符,例如 '/' '$',如何在没有这些字符的情况下随机生成该密码。
  • 不断生成新密码,直到你得到一个没有/的密码?
  • 理论上,在没有/的情况下获得密码可能需要无限长的时间。

标签: bash sed openssl blowfish roundcube


【解决方案1】:

-base64 切换到-hex 以避免在生成的密码中出现/

【讨论】:

  • 但是哪一个更安全?基于64还是十六进制?河豚长度要求最多为 32 个字符。使用 32 个字符长的 -hex 好不好?
  • @MaXi32:没关系,因为两者只是 32 个字符密码的不同表示。
【解决方案2】:

sed 如果在生成的值中找到未转义的分隔符,将始终失败。您可以使用此 gnu awk 将其替换为纯文本:

awk -i inplace 'BEGIN {val=ARGV[2]; --ARGC} /\$cfg\[.blowfish_secret.\][[:blank:]]*=/ {$0=val} 1' /var/www/html/phpMyAdmin/config.inc.php "$replace_pma_blowfish"

使其可读:

awk -i inplace 'BEGIN {
   val = ARGV[2]
   --ARGC
}
/\$cfg\[.blowfish_secret.\][[:blank:]]*=/ {
   $0 = val
} 1' /var/www/html/phpMyAdmin/config.inc.php "$replace_pma_blowfish"

【讨论】:

  • 谢谢,如果我想在密码中使用“/”,这是一个很好的替代答案,但我真的不想使用“/”字符,因为我将来需要 randomBlowfishSecret 的值对于即使转义也可能不接受“/”的其他代码。有类似roundcube不能接受':'和'@'密码的情况。顺便说一句,i is not in place 错误是什么
  • 按行保存更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多