我的 Java 应用程序需要处理加密文件。这是工作流程:
- 客户加密文件(例如 RSA 加密)并将它们上传到 Amazon S3。
- 我的 Java 应用程序从 AS3 获取文件。
- 我的 Java 应用程序解密文件。
- 我的 Java 应用程序使用解密的文件创建其他文件。
- 我的 Java 应用程序使用不同的 key 加密新文件并上传到 AS3。
- 客户拿起文件。
- 客户解密文件。
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/