如何使用 Microsoft ECSP 仅使用 RSA 公钥加密小数据块?
我需要使用 512 位 RSA 公钥加密一小块数据(16 字节)——对于我所知的大多数加密库来说,这是一项相当简单的任务,除了 MS CSP API(看起来)。 CryptEncrypt 函数的文档指出
Microsoft 增强型加密提供程序支持使用 RSA 公钥直接加密和使用 RSA 私钥解密。 加密使用 PKCS #1 填充。
但这对我不起作用。 好吧,我的代码可以工作并生成大小正确的加密数据块,但 openssl 无法解密它。 看起来 CryptEncrypt 仍然使用对称密码。
不幸的是,我发现的所有示例都涉及密码学与对称密码的组合,因此我手头没有一个可以让事情变得更容易的工作示例。
请有人给我指出这样一个例子,或者让我知道是否有一些我错过的不那么明显的陷阱?
谢谢。
I need to encrypt a small block of data (16 bytes) using 512 bit RSA public key -- quite an easy task for most cryptography libraries known to me, except for MS CSP API, as it seems.
Documentation for CryptEncrypt function states that
The Microsoft Enhanced Cryptographic Provider supports direct encryption with RSA public keys and decryption with RSA private keys. The encryption uses PKCS #1 padding.
It didn't work to me though. Well, my code works and produces encrypted block of data with correct size, but openssl fails to decypher it. It looks much like CryptEncrypt still uses symmetric cypher.
Unfortunately all the examples I've found refer to combined cryptography with symmetric cypher, so I don't have a working example on hands which definitely would make things easier.
Could please anyone point me to such an example or let me know if there are some not that obvious pitfalls I've missed?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这听起来像是一个字节序问题。 Microsoft 的 CryptEncrypt 函数返回小端格式的密文,而 OpenSSL 期望其数据采用大端格式。 在将加密数据传递给 OpenSSL 之前,您需要反转加密数据。
This sounds like an endianness issue. Microsoft's CryptEncrypt function returns the ciphertext in little-endian format, while OpenSSL expects its data to be in big-endian format. You'll need to reverse the encrypted data before passing it to OpenSSL.
这是代码(以防万一有人用谷歌搜索到这个主题):
Here's the code (just in case someone has googled this topic out):