我正在研究加密和解密。我对密码学很陌生,在使用充气城堡时我面临垫块损坏异常
这是我的加密/解密代码。
私有 AESFastEngine 引擎;
private BufferedBlockCipher cipher;
private final KeyParameter key=setEncryptionKey("testinggtestingg");
public KeyParameter setEncryptionKey(String keyText) {
// adding in spaces to force a proper key
keyText += " ";
// cutting off at 128 bits (16 characters)
keyText = keyText.substring(0, 16);
byte[] keyBytes = keyText.getBytes();
//key = new KeyParameter(keyBytes);
engine = new AESFastEngine();
cipher = new PaddedBufferedBlockCipher(engine);
return new KeyParameter(keyBytes);
}
public String encryptString(String plainText) {
try {
byte[] plainArray = plainText.getBytes();
cipher.init(true, key);
byte[] cipherBytes = new byte[cipher
.getOutputSize(plainArray.length)];
int cipherLength = cipher.processBytes(plainArray, 0,
plainArray.length, cipherBytes, 0);
cipher.doFinal(cipherBytes, cipherLength);
return (new String(cipherBytes));
} catch (DataLengthException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (InvalidCipherTextException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
// else
return null;
}
public String decryptString(String encryptedText) {
try {
byte[] cipherBytes = encryptedText.getBytes();
cipher.init(false, key);
byte[] decryptedBytes = new byte[cipher
.getOutputSize(cipherBytes.length)];
int decryptedLength = cipher.processBytes(cipherBytes, 0,
cipherBytes.length, decryptedBytes, 0);
cipher.doFinal(decryptedBytes,decryptedLength);
String decryptedString = new String(decryptedBytes);
// crop accordingly
int index = decryptedString.indexOf("\u0000");
if (index >= 0) {
decryptedString = decryptedString.substring(0, index);
}
return decryptedString;
} catch (DataLengthException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (InvalidCipherTextException e) {
e.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
// else
return null;
}