【问题标题】:OpenSSL public key decrypts file?OpenSSL公钥解密文件?
【发布时间】:2015-02-20 03:09:31
【问题描述】:

我的理解是公钥可以用来加密,私钥可以用来解密,公钥不能解密同一个公钥加密的文件。是我理解错了还是我做错了什么?

1) 生成密钥

openssl genrsa -out ./private.pem 2048

2) 生成公钥

openssl rsa -in ./private.pem -pubout > ./public.pem

3) 加密一个小文本文件

openssl enc -in ./in.txt -out ./out.enc -e -aes256 -k ./public.pem

4) 使用公钥解密文件

openssl enc -in ./out.enc -out ./out.txt -d -aes256 -k ./public.pem

最后一步可以解密“out.enc”文件。不是我想要或期望的。

【问题讨论】:

  • aes256 不是非对称/公钥算法 btw
  • 因为任何文件都可以用作密码短语,openssl also 可以使用public.pem,因为除了作为公钥之外,还有一个常规文件

标签: openssl public-key-encryption encryption-asymmetric


【解决方案1】:

虽然这个问题真的很老了,但我必须说明 TS 做对了:公钥无法解密由同一个公钥加密的文件。只有对应的私钥可以。

真正的问题是 AES 不是公钥算法。加密和解密使用相同的密钥,密钥可以是任意字节序列。

【讨论】:

    【解决方案2】:

    没有。那是错误的。这两个密钥(公钥和私钥)可用于加密和解密。关键是你不能用同一个键反转操作。

    例如

    encrypt(doc, publickey) -> decrypt(crypteddoc, publickey)  // fails
    encrypt(doc, privatekey) -> decrypt(crypteddoc, privatekey) // fails
    
    encrypt(doc, publickey) -> decrypt(crypteddoc,privatekey) // works
    encrypt(doc, privatekey) -> decrypt(crypteddoc, publickey) // works
    

    从技术上讲,您共享和公开哪个密钥并不重要,只要您将其中一个密钥公开,就永远不能共享另一个私有密钥。

    【讨论】:

    • 而用同一个钥匙倒车正是他想要做的。 :)
    • 没错。我正在使用用于加密文件的相同(公共)密钥来反转操作。我不希望这种情况发生。我希望公钥能够加密文件但不能解密同一个文件。
    • 从技术上讲,共享哪个密钥确实很重要!给定私钥,任何人都可以轻松计算公钥,但反之则不行。这就是为什么它被称为非对称密码学。
    • 是的,但公共和私人的指定纯粹是任意的。你可以拿“公共”密钥并且永远不会泄露它,同时拿“私人”密钥并将其分发给每个人。你可以称他们为“fred”和“barney”。实际的数学并不在乎。
    • -1:在问题中,公钥被滥用为对称密码。由于@Matt 所写的原因,建议公开私钥与公开公钥通常是相同的,这显然是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2020-02-28
    • 2020-03-15
    • 2018-07-31
    • 2012-04-07
    • 2012-04-28
    相关资源
    最近更新 更多