我会使用AES算法使用2个不同的密钥对字符串进行两次加密。之后,我想使用加密方法用相同的2个密钥解密加密的字符串。 我使用了这个功能,它适用于一次加密和解密,但不适用于第二次加密/解密:
public String encryptDecryptAes(String key , String input , int mode) throws NoSuchPaddingException, NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, ShortBufferException, BadPaddingException, IllegalBlockSizeException {
java.security.Security.addProvider(new BouncyCastleProvider());
String result = null;
byte[] inputBytes = input.getBytes();
byte[] keyBytes = key.getBytes() ;
SecretKeySpec secretKey = new SecretKeySpec(keyBytes , "AES") ;
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding", "BC");
if(mode==0) {
//Encrypt
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
cipherText = new byte[cipher.getOutputSize(inputBytes.length)];
ctLength = cipher.update(inputBytes, 0, inputBytes.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
result = new String(cipherText);
}
if(mode==1) {
//DECRYPT
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] output = new byte[cipher.getOutputSize(ctLength)];
int ptLength = cipher.update(cipherText, 0, ctLength, output, 0);
ptLength += cipher.doFinal(output, ptLength);
result = new String(output);
}
return result ;
}

答案 0 :(得分:1)
执行加密应该可以无限次,因为您只是从纯文本开始并使用新的密文结束。解密时,您需要确保以相反的顺序使用密钥。该过程类似于以下内容:
从名为plainText的文本开始。
加密:
解密:
在此示例中使用变量是为了简化说明,并不要求您实际拥有多个文本副本。
编辑:如果您认为用于加密的密钥是堆栈,那么最后一个是第一个。