Rumah >Java >javaTutorial >Bagaimanakah Saya Mengelakkan Isu Penukaran Apabila Menyulitkan Data Antara Tatasusunan Byte dan Rentetan?
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"); } }
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");
Mengelakkan Perangkap Pengekodan Biasa
Pengekodan UTF-16 boleh menyebabkan masalah kerana:
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!