使用Java中的两个或多个可能密钥进行数据加密/解密

时间:2013-10-21 10:05:08

标签: java encryption

是否存在允许多个密钥解密和加密的加密算法?

A = Key one
B = Key two

应该可以进行如下数据交换

1. Clear Text == A ==> Encrypted == B ==> Clear Text
2. Clear Text == B ==> Encrypted == A ==> Clear Text

编辑1:
算法应该以Java形式提供。

编辑2:更广泛的图片
数据库存储加密数据。大多数用户必须使用他们的个人密码对一小部分数据进行读写(解密和加密)。有些用户需要使用他们的个人密码访问(解密和加密)所有数据 两个用户组的成员不得知道另外的密码。

2 个答案:

答案 0 :(得分:2)

如果A是公钥,B是PKI系统中对应的私钥(或其他方式),则为是,否则为否。

更新:您现在提供了“更广泛的图片”,我担心答案已经成为:不,您不能这样做。要了解原因,您需要意识到两个组都需要能够加密和解密。所以你的要求确实是:

  1. 明文== A ==>加密== B ==>明文
  2. 明文== B ==>加密== A ==>明文
  3. 明文== A ==>加密== A ==>明文
  4. 明文== B ==>加密== B ==>明文
  5. 您可以做的最好的事情是使用一些授权机制来控制谁访问数据,并以未加密的方式存储数据。

答案 1 :(得分:2)

这通常通过存储在一个或多个公钥下加密的对称密钥来解决。

对称密钥用于加密数据库中的数据。每个用户都有一个非对称密钥对。如果用户有权查看一条数据,则必须存储在用户公钥下加密的对称密钥的副本。

这在Java中都是可以实现的。 Cipher.WRAP_MODE可用于密钥包装/解包。

因为你提到Java是一个约束,我觉得这个问题只是关于主题。但请注意,关于加密和安全设计的一般性讨论是Stack Overflow的主题。