【发布时间】:2012-11-10 18:23:03
【问题描述】:
我已经使用 AES 加密了一个字符串。我已经为 AES 提供了这样做的密钥。现在,我正在尝试用 RSA 加密给定的密钥(直到这里一切顺利),现在我需要再次用 RSA 加密这个加密的密钥。我收到一个错误“数据不得超过 117 个字节”。
public String encrypt(String DATA,String key_string) throws Exception {
String separator = "//msit//";
byte[] data = key_string.getBytes();
MessageDigest sha = MessageDigest.getInstance("SHA-1");
data = sha.digest(data);
data = Arrays.copyOf(data, 16); // use only first 128 bit
SecretKey key = new SecretKeySpec(data, "AES");
String final_matter = DATA + separator;
System.out.println(final_matter);
ecipher = Cipher.getInstance("AES");
ecipher.init(Cipher.ENCRYPT_MODE, key);
byte[] utf8 = final_matter.getBytes("UTF8");
byte[] enc = ecipher.doFinal(utf8);
return new sun.misc.BASE64Encoder().encode(enc);
}
【问题讨论】:
-
您是否试图要求多人在场才能解密密钥?
-
不,我实际上是在实现 PKI,在此我需要使用发送方的私钥加密密钥(用于加密数据的 AES 密钥),然后使用接收方的公钥加密。这里的问题是使用公钥加密会出现错误“数据不得超过 117 字节”
-
"用发件人的私钥加密密钥" 你为什么要这样做?私钥用于解密和签名,从不用于加密。见crypto.stackexchange.com/questions/4041/…
-
那你就读废话了。您永远不会使用 RSA 私钥进行加密。您使用接收者公钥加密会话密钥。并且可以选择使用自己的私钥对消息进行签名。
-
@MaheshVemuri:在我看来,这个主题太大而无法在一个答案中涵盖,并且可能不是 stackoverflow 的主题。也许在crypto stackexchange,但不是在这里。
标签: java encryption rsa pki