Encryption 如何仅使用客户端加密存储用户上载的文件?

Encryption 如何仅使用客户端加密存储用户上载的文件?,encryption,storage,client-side,Encryption,Storage,Client Side,我想建立一个应用程序,用户上传文件。但是服务器的所有者永远不能访问文件中的任何数据,只能访问加密内容 如果我必须自己用Java实现它,我会做如下事情: 使用每个文件(或每个用户,因为我不需要每个文件访问控制)的随机密钥对文件进行对称加密。然后对随机密钥进行非对称加密(每个需要访问文件的用户一次),并将其存储在服务器上的文件中 用户拥有一个密码,用于加密存储在服务器上的随机生成的帐户创建私钥以及公钥 用户密码散列(不是密码本身)也用作身份验证密码,以避免拥有多个密码,同时也避免将用户密码发送到服

我想建立一个应用程序,用户上传文件。但是服务器的所有者永远不能访问文件中的任何数据,只能访问加密内容

如果我必须自己用Java实现它,我会做如下事情:

  • 使用每个文件(或每个用户,因为我不需要每个文件访问控制)的随机密钥对文件进行对称加密。然后对随机密钥进行非对称加密(每个需要访问文件的用户一次),并将其存储在服务器上的文件中
  • 用户拥有一个密码,用于加密存储在服务器上的随机生成的帐户创建私钥以及公钥
  • 用户密码散列(不是密码本身)也用作身份验证密码,以避免拥有多个密码,同时也避免将用户密码发送到服务器(然后服务器通常计算并比较密码散列的附加散列)
我如何实现像这样的定制应用程序(使用库?、运行带有http API的其他服务器?)等等


我找到了一个http服务器,该服务器具有与s3兼容的rest API,它“支持服务器端和客户端加密”,但找不到足够的客户端加密文档。

我如何实现这样的自定义应用程序
-仍不清楚您要求的是什么。在您的情况下,如果要共享文件,每个文件都应该有一个加密密钥)。您也在寻找存储解决方案还是什么?我特别寻找比直接使用java标准库编写更快/更简单/bug更少的实现策略。例如,“在单独的服务器上安装project X,它有http API来处理加密并编写前端调用这些API。或者“使用库Y,它提供了您想要实现的大部分功能。”但是“将您的项目建立在任何现代语言的标准库上,这是您所能做的最好的。”“知道也很好。我认为我想要建立的系统应该已经基本存在,但也许我错了。在这个论坛上不鼓励基于意见的答案和搜索工具。不管怎样-您可以看看AWS SDK,它支持客户端加密(使用KMS或客户端提供的密钥)。然后您可以使用任何兼容S3的存储(aws S3、minio、ibm对象存储等等),谢谢。这些问题我该怎么办?删除它?