【问题标题】:Encrypting a parameter with openssl使用 openssl 加密参数
【发布时间】:2015-11-19 09:01:18
【问题描述】:

我想使用 public.key 使用 openssl 加密一个参数,并使用 linux 命令行使用 private.key 解密。但要求是加密后的输出应该只有一行,以便我可以将其传输或发送到其他服务器。不需要创建文件作为输出。

我见过 rsautl,但它在文件或十六进制转储中提供输出,这在我的情况下是不可能的,因为我需要在一行中输出。请提供必要的帮助。

【问题讨论】:

    标签: security encryption openssl


    【解决方案1】:

    pkeyutl 仅在您要求时才将其输出发送到文件。如果您不指定输出文件(使用-out 选项),它会将其输出发送到标准输出。但是因为它是二进制的,所以你不能轻易操作它,而且输出流中可能有行尾。

    为了解决这个问题,您可以将pkeyutl 的输出通过管道传输到base64。如果您的 base64 版本包装了它的输出,则您必须连接才能仅在一行上获得结果。某些版本(例如GNU coreutils 8.10)有一个-w0 选项,可以防止换行并产生单行输出(没有行尾)。以openssl 版本1.0.2a 为例:

    echo "foo" | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0
    

    其中bob_id_rsa.pub 是鲍勃openssl 格式的公钥。你可以解密:

    base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa
    

    bob_id_rsa 是 bob 的私钥。加密后解密的完整示例:

    bar=$( echo foo | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 )
    cue=$( echo $bar | base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa )
    echo $cue
    foo
    

    【讨论】:

    • 感谢它运行良好。我也能够解密。如果我使用上述命令,您能否指导我如何使用公钥加密和私钥解密?
    • 当然。您将需要openssl 格式的公钥(在我的回答中为bob_id_rsa.pub)。如果您有 SSH 私钥,您可以轻松地从中提取 openssl 格式的公钥:openssl rsa -in bob_id_rsa -pubout -out bob_id_rsa.pub。然后,您使用:openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 加密并使用:base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa 解密。完整示例:echo "foo" | openssl pkeyutl -encrypt -pubin -inkey bob_id_rsa.pub | base64 -w0 | base64 -d | openssl pkeyutl -decrypt -inkey bob_id_rsa.
    猜你喜欢
    • 1970-01-01
    • 2013-06-24
    • 2014-04-01
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 2017-03-06
    • 1970-01-01
    相关资源
    最近更新 更多