第一次使用密码。我有两个键,k1和k2,还有一个明文。我想用k1和k2对明文进行加密和解密。以下是我目前的工作:
// encryption part
Cipher c1 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
c1.init(Cipher.ENCRYPT_MODE, k1);
byte[] firstEncryption = c1.doFinal(text.getBytes());
Cipher c2 = Cipher.getInstance("RSA/ECB/NoPadding");
c2.init(Cipher.ENCRYPT_MODE, k2);
byte[] secondEncryption = c2.doFinal(firstEncryption);
System.out.println("C(M) = " + secondEncryption);
// decryption part
Cipher c1 = Cipher.getInstance("RSA/ECB/NoPadding");
c1.init(Cipher.DECRYPT_MODE, k2);
byte[] firstDecryption = c1.doFinal(secret);
Cipher c2 = Cipher.getInstance("RSA/ECB/PKCS1Padding");
c2.init(Cipher.DECRYPT_MODE, k1);
byte[] secondDecryption = c2.doFinal(firstDecryption);
System.out.println("Original text: " + new String(secondDecryption));
然后,当我尝试运行它时,在第二轮加密中,我得到了一个例外:
Exception in thread "main" javax.crypto.IllegalBlockSizeException: Data must not be longer than 117 bytes
我想这和填充物有关,但我没有发现任何问题。任何帮助都将不胜感激,谢谢!
1条答案
按热度按时间fcy6dtqo1#
如前所述,rsa只用于加密一小部分数据(例如。g。(对称密钥)
因此,如果使用第一个密钥加密数据,则生成的密文将具有模的长度,这比允许的117字节长,这将阻止执行第二轮。
使用双重加密的原因是什么?用两个单独的键锁定数据?然后有不同的方法可以做到这一点。
带有两个键的示例:
生成2个随机对称密钥(任意数量的密钥),得到的数据加密密钥是各个密钥的组合(xor)
使用数据加密密钥加密数据(使用对称密码,如aes…)
使用不同的rsa密钥加密各个密钥部分