当前位置: 首页 > 知识库问答 >
问题:

我可以在Java中实现端到端加密吗?

郭彬郁
2023-03-14

我正在创建一个web服务,它可以在线存储带有公钥的用户列表,以及加密的消息。我的最终目标是端到端加密。

我最初认为这很容易——“哦,OpenSSL和RSA私钥/公钥非对称加密很棒。”错误的RSA只会加密一点点数据,大概是为了来回传递一个常规的对称密钥。

好吧,所以我试着在网上找到解决办法。他们中的大多数人要么在没有运行示例的情况下结束,要么指向使用命令行,所有这些似乎都是过度和不完整的。

有没有一种方法可以使用非对称密钥对数据进行端到端加密,还是完全是个人的白日梦?PHP中的OpenSSL已经有了实现这一点的方法,虽然有些困难,但它确实有效。

有什么方法我没用吗?

共有3个答案

施永宁
2023-03-14

我真的不确定您想要加密和解密什么,但GnuPG for Java可能是一个不错的选择。

它支持公钥和私钥,可以加密和解密更大的文件和数据。

严令秋
2023-03-14

Ebbe的答案非常好,但在我试图找到一个像样的混合加密库时,这个问题在谷歌排名很高(Bouncy Castle的文档不存在,也不是直接的,GnuPG for Java依赖于操作系统,没有经过全面测试)。所以我想我应该补充一下艾比对疲惫旅行者的回答。

如果可以使用它们,JWTs(JavaScript Web令牌)可能会很方便。这也是IETF标准。有两种不同的类型:

>

JWE是一个加密的JWT。它也有自己的IETF标准

不幸的是,目前对JWE的支持有点差。然而,这应该有望改善。此时(2017年4月11日),唯一支持JWEs的Java JWT库是BitBucket的Jose4j。

邰英毅
2023-03-14

使用非对称密钥(如RSA)加密大量数据的常用方法是使用混合加密。在混合加密中,混合使用对称和非对称加密。首先生成一个随机对称密钥,用于加密数据。然后用非对称密钥加密对称密钥。然后将加密数据和加密的随机密钥放在一起,构成完整的加密数据。

您所提到的PHP中的openssl_seal()使用混合加密,其中对称算法是RC4。数据如何在加密文件中编码和放在一起已经由openssl实现定义,可能不一定是您想要的方式。作为混合加密的另一个例子,PGP使用它自己的数据打包方式。

无论如何,混合加密不是你在java中开箱即用的东西,你通常需要自己实现每个加密打包步骤,或者使用其中一个实现该版本的库。自己做的一个例子是我发现的Java代码,它可以解密用上面提到的openssl_seal()加密的消息。

使用库进行混合加密的一个例子是在Bouncy Castle中使用PGP支持。

 类似资料:
  • 我们有一个AngularJS应用程序,其中有一个nodejs应用程序,它只在HTTPS端口为443时为服务主机名创建证书和密钥。然后创建的证书在nginx中使用,如下所示: 但是当我在路由中设置443端口并重新加密终止时,它在访问应用程序时出现以下错误 请求甚至没有到达pod。如果我创建带有边缘终止的路由,则会出错 在边缘终止中,从路由器到pod没有加密。我不能使用直通终止策略,因为我们的路由中有

  • 我有一个由组聊天组成firebase应用程序。我想实现端到端加密。到目前为止,我已经尝试低于策略 1)为组创建加密/解密文本的密钥(AES) 我面临的挑战是,我已经使用我的公钥在服务器上加密了AESKEY,但是当用户请求AESKEY时,我的应用程序可能会脱机,所以最终用户将无法获得解密的AESKEY 我想通过加密将AESKEY保留在服务器上,并且根据用户的请求在服务器上执行加密/解密任务。

  • 在设置->安全->音视频会议安全性与隐私功能栏中,可找到 标准加密、增强加密选项,当选择增强加密选项后,你所创建的所有音视频会议,都将为端到端加密会议。注意:该设置仅对自己所创建的音视频会议生效,你加入他人创建的会议时,未必时端到端加密会议;他人加入你所创建的通话或会议时,一定时端到端加密会议。 注意:端到端加密会议中,不支持自动转呼对方pstn座机号码、不支持使用拨号键盘功能、不支持邀请pstn

  • 问题内容: 我有一个包含5000多个数据记录的网格。这些数据每天都在增长。当我用网格加载页面时,网格显示数据几乎要花一分钟,我必须一次显示10行。 然后可以使用此jqGrid实现延迟加载吗? 这是我生成JSon字符串的操作: 这是带有jqGrid的页面: 请参阅下面的查询: 我在上述操作中设置的限制金额。该值为10。 问题答案: 好的,所以这是一个基于JPA的部分答案(但是我想让它适应Hibern

  • 老师们五一假期快乐 有没有老师做过类似的业务

  • 一些遗留Java使用名为jasypt的包加密密码。 它使用加密密码。 示例明文密码为: 盐为: 加密密码为: 下面是Java代码中实际加密密码的片段: