/**
* 这里最好使用加密后的字符串
*/
private static char[] password = "0123456789abcdef0123456789abcdef".toCharArray();
/**
* 这里最好使用加密后的字符串
*/
private static byte[] salt = "0123456789".getBytes();
private static int iterationCount = 5;
/**
* 加密算法
* @param passwordText
* @return
* @throws DataLengthException
* @throws IllegalStateException
* @throws InvalidCipherTextException
*/
public static String encryptRijndael(String passwordText) throws DataLengthException, IllegalStateException, InvalidCipherTextException {
PKCS12ParametersGenerator pGen = new PKCS12ParametersGenerator(new SHA256Digest());
char[] passwordChars = password;
final byte[] pkcs12PasswordBytes = PBEParametersGenerator.PKCS12PasswordToBytes(passwordChars);
pGen.init(pkcs12PasswordBytes, salt , iterationCount );
BlockCipher engine = new RijndaelEngine(256);
CBCBlockCipher cbc = new CBCBlockCipher(engine);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(cbc, new PKCS7Padding());
ParametersWithIV aesCBCParams = (ParametersWithIV) pGen.generateDerivedParameters(256, 256);
cipher.init(true, aesCBCParams);
byte[] input = passwordText.getBytes();
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int cipherLength = cipher.processBytes(input, 0, input.length, cipherText, 0);
cipher.doFinal(cipherText, cipherLength);
// String result = new String(Base64.encode(cipherText));
// System.out.println("testEncryptRijndael result : " + result);
// assertEquals("cMoMSNMNsikAkLjaheE6iD48Xkfvo7Y6gS8/zroGfHc=",result);
return new String(Base64.encode(cipherText));
}
/**
* 解密算法
* @param passwordText
* @return
* @throws DataLengthException
* @throws IllegalStateException
* @throws InvalidCipherTextException
*/
public static String decryptRijndael(String passwordText) throws DataLengthException, IllegalStateException, InvalidCipherTextException {
PKCS12ParametersGenerator pGen = new PKCS12ParametersGenerator(new SHA256Digest());
char[] passwordChars = password;
final byte[] pkcs12PasswordBytes = PBEParametersGenerator.PKCS12PasswordToBytes(passwordChars);
pGen.init(pkcs12PasswordBytes, salt , iterationCount );
BlockCipher engine = new RijndaelEngine(256);
CBCBlockCipher cbc = new CBCBlockCipher(engine);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(cbc, new PKCS7Padding());
ParametersWithIV aesCBCParams = (ParametersWithIV) pGen.generateDerivedParameters(256, 256);
cipher.init(false, aesCBCParams);
byte[] output = Base64.decode(passwordText.getBytes());
byte[] cipherText = new byte[cipher.getOutputSize(output.length)];
int cipherLength = cipher.processBytes(output, 0, output.length, cipherText, 0);
int outputLength = cipher.doFinal(cipherText, cipherLength);
outputLength += cipherLength;
byte[] resultBytes = cipherText;
if (outputLength != output.length) {
resultBytes = new byte[outputLength];
System.arraycopy(
cipherText, 0,
resultBytes, 0,
outputLength
);
}
// String result = new String(resultBytes);
// System.out.println("testDecryptRijndael result : " + result);
// assertEquals("Hallo ich bin ein Test", result);
return new String(resultBytes);
}