расшифровывать / расшифровывать с помощью баночки-бодрящего жука случайно, иногда работает, а иногда нет - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу зашифровать с помощью 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));
}

что мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...