如何通过公钥加密文件
Posted
技术标签:
【中文标题】如何通过公钥加密文件【英文标题】:How to encrypt file by public key 【发布时间】:2018-03-02 20:42:59 【问题描述】:我需要加密和解密文件(在 QT SDK 中)。 用私钥加密。 用公钥解密。
我在网上找不到任何可用的示例。你能把我推到正确的方向吗?
【问题讨论】:
Qt: data decryption using private/public key的可能重复 PKI 以相反的方式工作。私钥用于解密,公钥用于加密。从理论上讲,数学允许相反的操作,但结果将不再是密码安全 感谢您的回复...我找到了任何可用的解决方案。我会在我的回答中添加更多信息。 注意,要加密的数据长度必须小于密钥的大小。这通常意味着非对称密钥加密不是文件加密的解决方案。如果需要非对称密钥对,则混合加密是解决方案。还要考虑对称密钥加密是否足够。 感谢您的回答。你能告诉我更多吗?我不明白你的意思。特别是 - 文件(要加密的长度)必须小于密钥的长度。就我而言,这不是问题,因为我将加密大约 200 个字符的文件。但是如果我不小心需要加密一个 4MB 的文件,那我就不能使用非对称加密了吗? 【参考方案1】:我研究如何在 QT 中使用证书。 问题是,它取决于 OpenSSL 版本、windows / linux 版本和 32/64 位。
我使用的是 Windows minGW/32,MSVC2015/32/64 版本。
第一个: 我在 youtube 上使用分步教程“带有 OpenSSL 的 RSA 和 AES Primer”(项目 150-153)非常感谢 Bryan。 https://www.youtube.com/watch?v=LATSg00HaXk
第二个: 布赖恩在 linux 上工作。在 Windows 上,它的库名称有问题。
您必须下载或编译 OpenSSL 库。 我使用从https://slproweb.com/products/Win32OpenSSL.html下载 只有 OpenSSL-Win32.v1.0.2n 与教程结合使用。 我没有尝试自己的构建。非常感谢托马斯。
您必须将标头和库添加到您的 pro 文件中,如下所示:
LIBS += -LD:/Develop/openssl/OpenSSL-Win32.1.0.2.n.full -llibeay32 LIBS += -LD:/Develop/openssl/OpenSSL-Win32.1.0.2.n.full -llibssl32 LIBS += -LD:/Develop/openssl/OpenSSL-Win32.1.0.2.n.full -lssleay32 INCLUDEPATH += D:/Develop/openssl/OpenSSL-Win32.1.0.2.n.full/include
-
您已经注意到,库在 Windows 中的命名方式与在 linux 中不同。
同时在linux中你必须添加libcrypto.a和libssl.a,windows中的名称完全不同(uáááá为什么???)libeay32,libssl32,ssleay32。
4。 如果您想使用 64 位版本,您必须为 MSVC2015/17 自己构建并使用它。我暂时不测试这一步。
【讨论】:
以上是关于如何通过公钥加密文件的主要内容,如果未能解决你的问题,请参考以下文章