我正在创建一个Web服务,用于存储用户在线公钥以及加密消息的列表.我的最终目标是端到端加密.
我最初认为这很容易 - "哦,OpenSSL和RSA私钥/公钥非对称加密很棒." 假.RSA只会加密一小部分数据,大概是来回传递一个常规的对称密钥.
好的,所以我试着在网上找到解决方案.其中大多数任结束,没有一个有效的实施例或在使用命令行指出,所有这些似乎过度和不完整的.
是否有办法使用终端到端到端的数据加密与非对称密钥的方式,或者是这一切是个人白日梦?PHP中的 OpenSSL已经有了一种方法可以做到这一点,而且它很麻烦,但它确实有效.
我在这里找不到一些方法吗?
使用非对称密钥(例如RSA)加密大量数据的常用方法是使用混合加密.在混合加密中,您可以混合使用对称和非对称加密.首先,您生成了一个随机对称密钥,用于加密数据.然后使用非对称密钥加密对称密钥.然后将加密数据+加密随机密钥放在一起并构成完整的加密数据.
在openssl_seal()
PHP中你参考,使用混合加密,其中对称算法RC4是.openssl实现已经定义了如何将数据编码并放在加密文件中,并且可能不一定是您想要的方式.作为混合加密的另一个例子,PGP使用它自己的打包数据的方式.
在任何情况下,混合加密都不是你在Java中开箱即用的东西,你通常需要自己实现每个加密+打包步骤,或者使用其中一个实现此版本的库.这样做的一个例子就是我发现的这个Java代码可以解密用上面提到的加密的消息openssl_seal()
.
使用库进行混合加密的一个示例可能是使用Bouncy Castle中的PGP支持 .