【问题标题】:Is there a way to encrypt and decrypt with RSA having just pem public key file OR pem private key file?有没有办法用只有 pem 公钥文件或 pem 私钥文件的 RSA 加密和解密?
【发布时间】:2018-11-25 02:02:23
【问题描述】:

我正在尝试使用 openssl 加密短文本,但我不知道如何继续。更具体地说:我发现了一个似乎可以工作但必须从终端执行的指令的代码。是的,我知道,存在 system() 函数,但我想避免它,因为它需要文件夹中的文件,这意味着我首先创建它然后加密。简而言之:是否有一些 c 代码函数可以替代它 openssl rsautl -encrypt -inkey public_key.pem -pubin -in -out 和这个 openssl rsautl -decrypt -inkey private_key.pem -in -out ??? 笔记: RSA_public_encrypt() RSA_public_decrypt() 不能使用,因为它们需要 RSA 结构,即密钥对,但在我的场景中我只有公钥

【问题讨论】:

  • 实际上,这就是 RSA 和任何其他 非对称 加密的工作原理:Alice 使用 Bob 的公钥进行加密,而 Bob 是唯一可以使用他的私钥解密的人 - 或者反过来,Bob 用他的私钥加密,如果现在 Alice 可以用 Bob 的公钥解密消息,她肯定知道消息来自 Bob,因为只有他才能进行正确的en加密(--> 数字签名)。
  • stackoverflow.com/questions/108518/rsa-encryption-library-for-c 为图书馆或只是用“rsa图书馆”咨询你最喜欢的搜索引擎...
  • @Aconcagua 好的,但这无济于事......我怎样才能用 只有 Bob 的公钥加密我的消息?并且没有首先发送 IV、nonce 或加密的对称密钥?此外,您提供的库是用于 C++ 的,但我正在用 C 开发我的应用程序,但最重要的是它不使用填充,对我来说它完全没用(我一直认为,并且理论证实,普通 RSA 容易受到多种攻击)
  • 嗯,这就是非对称加密背后的全部思想:想象消息是 7,公钥是 1,en-/decrpytion 是通过加法完成的(所以是某种 Cesar),所以我发送 8。我不必知道这个的私钥(-1)......
  • 你可能更喜欢this one,或者只是these之一。

标签: c openssl cryptography rsa


【解决方案1】:

尽管RSA *rsa 结构能够保存密钥对,但使用RSA_public_encrypt() 时不需要同时拥有私钥和公钥

@Aconcagua 已经对非对称密码学给出了很好的解释,这实际上解释了你永远不必随身携带两把密钥,打算加密的一方持有公钥,而想要解密的一方将拥有相应的私钥

因此您只需在RSA *rsa 中加载您的公钥并将其与RSA_public_encrypt() 一起使用

【讨论】:

  • 为了更清楚(引用自 RSA 文档): > 在公钥中,私有指数和相关秘密值为 NULL
  • 现在我试着再解释一下。假设你是客户。你想加密一个文本文件(在我的例子中是对称会话密钥)。您只有(我的意思是只有)公共服务器密钥。有没有可以用于此目的的功能? RSA_public_encrypt() 不好,因为我没有 RSA 结构。请注意这一点:在网络上,您可以提供一些命令来提示并执行我正在尝试通过代码执行的操作
  • @mariomura 您想如何将对称密钥与(根据定义!)a对称算法一起使用?或者您是否真的打算实施hybrid encryption,您将在其中交换 密钥以进一步对称 传输通过 初始RSA 加密数据?无论如何,RSA结构definition是头文件自带的;然后,您将创建your own 的实例,适当地填充成员,然后将其传递给函数...
猜你喜欢
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2015-05-27
  • 2017-05-11
相关资源
最近更新 更多