如何生成没有某些字符或允许某些字符集的openssl河豚

问题描述

我有以下 bash 脚本可以将河豚自动插入到 PHPMyAdmin 的 config.inc.PHP 中:

#!/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

解决方法

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

, 如果在生成的值中找到未转义的分隔符,

s 将始终失败。您可以使用此 i 将其替换为纯文本:

sed

使其可读:

gnu awk