Я хочу зашифровать с помощью bouncycastle.
по коду иногда работает, а иногда нет.
Например, для этого кода:
String msg="ivivivi;message";
String key="1234567891234567";
SecureRandom secureRandom = new SecureRandom();
byte[] keyB = new byte[16];
secureRandom.nextBytes(keyB);
String cipher=Encryption.encrypt(msg.getBytes(),key.getBytes(),keyB);
System.out.println("cipher: "+cipher);
String original=Encryption.decrypt(cipher.getBytes(), key.getBytes(), keyB);
System.out.println("original: "+original);
Ожидаемый результат:
cipher: c÷cAn‘iµHy~‹eX03
original: ivivivi;message
Это дает вывод, но если запустить, запустить код снова и снова, иногда дает ожидаемый результат, а иногда нет. когда он не работает, он выдает ошибку:
org.bouncycastle.crypto.InvalidCipherTextException: блок блока поврежден
Здесь мои функции шифрования / дешифрования:
private static byte[] cipherData(PaddedBufferedBlockCipher cipher, byte[] data)
throws Exception
{
byte[] result=null;
try{
int minSize = cipher.getOutputSize(data.length);
byte[] outBuf = new byte[minSize];
int length1 = cipher.processBytes(data, 0, data.length, outBuf, 0);
int length2 = cipher.doFinal(outBuf, length1);
int actualLength = length1 + length2;
result = new byte[actualLength];
System.arraycopy(outBuf, 0, result, 0, result.length);
}catch(Exception e){
System.err.println("Encryption [0010] "+e.getMessage());
}
return result;
}
public static String decrypt(byte[] cipher, byte[] key, byte[] iv) throws Exception
{
System.out.println("Encryption decrypt: "+new String(cipher));
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
try {
aes.init(false, ivAndKey);
} catch (Exception e) {
return "";
}
byte[] cip=cipherData(aes, cipher);
if(cip==null){
System.err.println("Encryption.decrypt [0011]: cip is null");
return "";
}
String result=new String(cip);
System.out.println("Encryption decrypted: "+result);
return result;
}
public static String encrypt(byte[] plain, byte[] key, byte[] iv) throws Exception
{
System.out.println("Encryption encrypt: "+new String(plain));
PaddedBufferedBlockCipher aes = new PaddedBufferedBlockCipher(new CBCBlockCipher(
new AESEngine()));
CipherParameters ivAndKey = new ParametersWithIV(new KeyParameter(key), iv);
aes.init(true, ivAndKey);
return new String(cipherData(aes, plain));
}
что мне не хватает?