无法使用随机十六进制生成的密码 openssl 加载私钥

unable to load Private Key using random hex generated passkey openssl

我正在编写 bash 脚本来生成和使用 RSA 私钥。当我 运行 它时,它无法生成私钥并说 "unable to load Priavate Key" 然后:预期:任何私钥。

当我使用 pass:foo 作为密码通过 iTerm2 运行 genrsa 命令时它有效,但我无法使用我在 gen_hex 函数中生成的十六进制字符串.

gen_hex() {
    # generate random hexadecimal string/array
    echo hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}

check_for_keys() {
    if [ ! -f ./public.pem ]; then
        echo "> Generating Passphrase..."
        passp = $(gen_hex)

        touch pass.txt
        echo $passp > pass.txt
        echo "> Done."

        echo "> Generating keys..."
        openssl genrsa -des3 -passout pass:$passp -out private.pem 4096
        echo "> Done."

        echo "> Exporting Public Key..."
        openssl rsa -in private.pem -passin pass:$passp -outform PEM - 
        pubout - out public.pem
        echo "> Done."

    fi
}

完整错误信息:

:unable to load Private Key 35508:error:0906D06C:PEM 
routines:PEM_read_bio:no start line: 
/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098- 
64.50.6/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY

谢谢!

你有(至少)两个重大问题。首先,gen_hex 不会生成十六进制字符串;它输出你想要的命令运行。删除 echo。其次,您不能在作业中的 = 周围放置空格。

gen_hex() {
  # generate random hexadecimal string/array
  hexdump -n 16 -e '4/4 "%08X" 1 "\n"' /dev/random
}

passp=$(gen_hex)

第三,您应该在使用 $passp 的任何地方引用它,以避免涉及对字符串中任何字符的 shell 解释的任何令人讨厌的意外。为了安全起见,我也会使用 printf 而不是 echo,如果没有其他原因,只是为了避免 echo 将附加到密码末尾的换行符。

printf '%s' "$passp" > pass.txt