如何在java中使用密码进行双重加密?

gxwragnw  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(400)

第一次使用密码。我有两个键,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

我想这和填充物有关,但我没有发现任何问题。任何帮助都将不胜感激,谢谢!

fcy6dtqo

fcy6dtqo1#

如前所述,rsa只用于加密一小部分数据(例如。g。(对称密钥)

Data must not be longer than 117 bytes

因此,如果使用第一个密钥加密数据,则生成的密文将具有模的长度,这比允许的117字节长,这将阻止执行第二轮。
使用双重加密的原因是什么?用两个单独的键锁定数据?然后有不同的方法可以做到这一点。
带有两个键的示例:
生成2个随机对称密钥(任意数量的密钥),得到的数据加密密钥是各个密钥的组合(xor)
使用数据加密密钥加密数据(使用对称密码,如aes…)
使用不同的rsa密钥加密各个密钥部分

相关问题