Rumah > Java > javaTutorial > Bagaimanakah Saya Mengelakkan Isu Penukaran Apabila Menyulitkan Data Antara Tatasusunan Byte dan Rentetan?

Bagaimanakah Saya Mengelakkan Isu Penukaran Apabila Menyulitkan Data Antara Tatasusunan Byte dan Rentetan?

Barbara Streisand
Lepaskan: 2024-11-19 09:15:03
asal
314 orang telah melayarinya

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

Mengatasi Isu Penukaran Antara Tatasusunan Byte dan Rentetan dalam Penyulitan

Dalam konteks penyulitan, menukar tatasusunan bait kepada rentetan dan belakang boleh menimbulkan cabaran, selalunya mengakibatkan nilai yang tidak sepadan dan ralat penyahsulitan. Berikut ialah penerokaan isu ini dan penyelesaian terperinci.

Pertimbangkan senario penyulitan berikut:

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");
    }
}
Salin selepas log masuk

Walau bagaimanapun, menyimpan data yang disulitkan sebagai rentetan adalah tidak digalakkan kerana tujuan penggunaannya untuk dibaca manusia teks, bukan data binari sewenang-wenangnya. Jika ia tidak dapat dielakkan, menggunakan pengekodan dengan pemetaan 1-ke-1 antara bait dan aksara adalah penting.

Pengekodan ISO-8859-1

Untuk senario khusus ini , pengekodan ISO-8859-1 disyorkan:

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

Mengelakkan Perangkap Pengekodan Biasa

Pengekodan UTF-16 boleh menyebabkan masalah kerana:

  • String.getBytes("UTF-16") menambah aksara penanda pesanan bait.
  • Bukan semua jujukan bait boleh dipetakan kepada aksara UTF-16 (cth., jujukan 4-bait dengan pemetaan aksara tidak sah ).

Pengekodan Alternatif

Jika ISO-8859-1 tidak memenuhi keperluan anda, pertimbangkan untuk menggunakan pengekodan heksadesimal atau base64. Walau bagaimanapun, ini memerlukan perpustakaan pembantu tambahan kerana ia tidak ditakrifkan dalam API standard.

Dengan mematuhi garis panduan ini dan menggunakan pengekodan yang sesuai, anda boleh menyelesaikan percanggahan antara tatasusunan bait dan rentetan dalam proses penyulitan anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Mengelakkan Isu Penukaran Apabila Menyulitkan Data Antara Tatasusunan Byte dan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan