Wie füge ich Bits in einen Block in der Java-Kryptographie ein?

Ich versuche, ein einfaches Java-Programm zu erstellen, das Kryptographie beinhaltet.

Zuerst habe ich einen Block mit 32 Bytes aus der Datei clearmsg.txt gelesen. Dann konvertiere ich diesen Block in eine Ganzzahl und verwende ihn zur Verschlüsselung. Leider ist die Größe des Chiffretexts nicht statisch; Manchmal werden 30 Bytes und manchmal 26 Bytes zurückgegeben. Dies scheint unabhängig vom Ergebnis der Addition zu sein.

Wie kann ich sicherstellen, dass es sich um einen 32-Byte-Chiffrierblock handelt? Wie füge ich diesem Block Bits / Bytes hinzu? Denn wenn ich versuche, diesen Block zu entschlüsseln, muss ich 32 Chiffretext-Bytes lesen.

private void ENC_add() {

    final File clearmsg = new File("F:/java_projects/clearmsg.txt");
    final File ciphermsg = new File("F:/java_projects/ciphermsg.txt");
    final byte[] block = new byte[32];
    try {
        final FileInputStream fis = new FileInputStream(clearmsg);
        final FileOutputStream fcs = new FileOutputStream(ciphermsg);
        int i;
        while ((i = fis.read(block)) != -1) {
            // Is this process true
            // here M2 (Plain text) shuld be 32 byte
            M2 = new BigInteger(block);
            // here encrypt M2 by add k1 where k1 any number less than P
            CM2 = M2.add(K1).mod(P);
            // here my problem some time Cipher CM2 length 31 , some time CM2 length 32 ,some time CM2 length 30
            System.out.println("THE CM2=" + CM2.toByteArray().Length);
            fcs.write(CM2.toByteArray(), 0, i);
        }
        fcs.close();

    }

    catch (final IOException e) {
        e.printStackTrace();
    }
}

// Here problem for decrypt
private void DEC_ADD() {

    // DECREPT METHOD
    final File ciphermsg = new File("F:/java_projects/ciphermsg.txt");
    final File clearmsg = new File("F:/java_projects/rciphermsg.txt");
    final byte[] block = new byte[32];
    try {
        final FileInputStream fis = new FileInputStream(ciphermsg);
        final FileOutputStream fos = new FileOutputStream(clearmsg);
        int i;
        while ((i = fis.read(block)) != -1) {
            // CM2 NOT STATIC BITS NUMBER BECAUSE INDEPENDET ON RESULT ADDITIONAL AND PRIME NUMBER P through ENCRYPT
            // Process
            CM2 = new BigInteger(block);
            // here RM2 is decrypt cipher (CM2) NOTE When encrypt above M2 WAS 32 bytes and Cipher CM2 was 30 bytes
            // and When I read from file 32 bytes then this is my problem
            RM2 = CM2.subtract(K1).mod(P);

            fos.write(RM2.toByteArray(), 0, i);
        }
        fos.close();
        System.out.println("THE RM2=" + CM2.bitLength());
    } catch (final IOException e) {
        e.printStackTrace();
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage