Heim >Java >javaLernprogramm >Wie vermeide ich Konvertierungsprobleme beim Verschlüsseln von Daten zwischen Byte-Arrays und Strings?

Wie vermeide ich Konvertierungsprobleme beim Verschlüsseln von Daten zwischen Byte-Arrays und Strings?

Barbara Streisand
Barbara StreisandOriginal
2024-11-19 09:15:03303Durchsuche

How Do I Avoid Conversion Issues When Encrypting Data Between Byte Arrays and Strings?

Behebung von Konvertierungsproblemen zwischen Byte-Arrays und Strings bei der Verschlüsselung

Im Zusammenhang mit der Verschlüsselung kann die Konvertierung von Byte-Arrays in Strings und zurück eine Herausforderung darstellen, die häufig zu nicht übereinstimmenden Werten führt und Entschlüsselungsfehler. Hier finden Sie eine Untersuchung dieser Probleme und eine detaillierte Lösung.

Stellen Sie sich das folgende Verschlüsselungsszenario vor:

public class NewEncrypter {

    // Encryption and decryption are performed on byte arrays, not strings
    public byte[] encrypt(String input) throws Exception {
        cipher.init(Cipher.ENCRYPT_MODE, key);
        return cipher.doFinal(input.getBytes("UTF-16"));
    }

    public String decrypt(byte[] encryptionBytes) throws Exception {
        cipher.init(Cipher.DECRYPT_MODE, key);
        return new String(cipher.doFinal(encryptionBytes), "UTF-16");
    }
}

Von der Speicherung verschlüsselter Daten als Zeichenfolgen wird jedoch aufgrund ihrer beabsichtigten Verwendung für die Lesbarkeit durch Menschen abgeraten Text, keine willkürlichen Binärdaten. Wenn es unvermeidbar ist, ist die Verwendung einer Kodierung mit einer 1-zu-1-Zuordnung zwischen Bytes und Zeichen von entscheidender Bedeutung.

ISO-8859-1-Kodierung

Für dieses spezielle Szenario , die ISO-8859-1-Kodierung wird empfohlen:

    String decoded = new String(encryptedByteArray, "ISO-8859-1");
    byte[] encoded = decoded.getBytes("ISO-8859-1");

Common vermeiden Fehler bei der Kodierung

UTF-16-Kodierung kann Probleme verursachen, weil:

  • String.getBytes("UTF-16") fügt ein Markierungszeichen für die Bytereihenfolge hinzu.
  • Nicht alle Bytesequenzen können UTF-16-Zeichen zugeordnet werden (z. B. 4-Byte-Sequenzen mit ungültigen Zeichen). Zuordnungen).

Alternative Kodierungen

Wenn ISO-8859-1 Ihre Anforderungen nicht erfüllt, sollten Sie die Verwendung von Hexadezimal- oder Base64-Kodierung in Betracht ziehen. Diese erfordern jedoch zusätzliche Hilfsbibliotheken, da sie nicht in der Standard-API definiert sind.

Durch die Einhaltung dieser Richtlinien und die Verwendung einer geeigneten Kodierung können Sie die Diskrepanzen zwischen Byte-Arrays und Strings in Ihrem Verschlüsselungsprozess beheben.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Konvertierungsprobleme beim Verschlüsseln von Daten zwischen Byte-Arrays und Strings?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn