java - 如何与客户交换加密 key ?

标签 java encryption amazon-s3 cryptography

我的 Java 应用程序需要处理加密文件。这是工作流程:

  1. 客户加密文件(例如 RSA 加密)并将它们上传到 Amazon S3。
  2. 我的 Java 应用程序从 AS3 获取文件。
  3. 我的 Java 应用程序解密文件。
  4. 我的 Java 应用程序使用解密的文件创建其他文件。
  5. 我的 Java 应用程序使用不同的 key 加密新文件并上传到 AS3。
  6. 客户拿起文件。
  7. 客户解密文件。

Amazon S3 提供了用于下载/上传、解密/加密的 Java 类。此 API 将 java.security.KeyPair 作为输入。我不确定客户应如何向我的 Java 应用程序提供 key ,以便该应用程序可以获取 key 作为 java.security.KeyPair

在客户和应用程序之间交换 key 的正确方法是什么?可以使用哪种 key 文件格式?

最佳答案

通常,非对称加密/解密是这样工作的:

  • 您生成一对私钥/公钥。私钥应保密,不应四处发送等。公钥可提供给客户,无需担心安全问题。
  • 现在客户用这个公钥加密他的文件。加密后的文件只能用私钥解密。因此用户可以将文件发送给您(在您的情况下通过 Amazon S3)。
    • 您收到文件并使用您的私钥对其进行解密。

现在您已经从客户处获得了一份文件。为了能够发回加密消息,您需要另一个公钥/私钥对。这一次,客户必须是唯一知道私钥的人。例如,他可以将公钥放入他发送给您的文件中。无论如何,您需要以某种方式从他那里获得公钥。使用该 key ,您可以加密文件并将它们发送到 Amazon S3。用户拿起它们并用他的私钥解密它们。

因此,客户不得给您一个java.security.KeyPair,因为它们包含私钥。发送私钥是不安全的。但他可以将公钥作为 java.security.PublicKey 发送给您。 .我认为最好的方法是在他提供的文件中将其发送给您,或者在他同时上传的单独文件中发送给您,除了提供的文件。

关于java - 如何与客户交换加密 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765787/

相关文章:

java - 为什么我的方法返回空密码?

java - 复制抛出异常的代码

java - 将一个节点类型字符串与另一个节点类型字符串进行比较的二叉搜索树

php - 使用 PHP 在 MySQL 数据库中自动加密?

java - mcrypt "ncfb"模式的 Java 等价物是什么?

java - 如何使用另一个 RSAKey 加密一个 RSAKey?

javascript - AWS javascript SDK多文件上传进度条

java - Java 中的 HMAC-SHA256 产生与 JavaScript 不同的输出

php - Laravel 5.2-调用未定义的方法 Illuminate\Support\Facades\Response::header()

java - 复制后 Amazon S3 Java SDK copyObject 权限被拒绝