Dans le contexte du cryptage, la conversion des tableaux d'octets en chaînes et inversement peut poser des problèmes, entraînant souvent des valeurs incompatibles et des erreurs de décryptage. Voici une exploration de ces problèmes et une solution détaillée.
Considérez le scénario de chiffrement suivant :
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"); } }
Cependant, le stockage de données chiffrées sous forme de chaînes est déconseillé en raison de leur utilisation prévue à des fins lisibles par l'homme. du texte, pas des données binaires arbitraires. Si cela est inévitable, utiliser un encodage avec un mappage 1 à 1 entre les octets et les caractères est crucial.
Encodage ISO-8859-1
Pour ce scénario spécifique , l'encodage ISO-8859-1 est recommandé :
String decoded = new String(encryptedByteArray, "ISO-8859-1"); byte[] encoded = decoded.getBytes("ISO-8859-1");
Éviter les Pièges d'encodage
L'encodage UTF-16 peut causer des problèmes car :
Encodages alternatifs
Si ISO-8859-1 ne répond pas à vos exigences, envisagez d'utiliser un encodage hexadécimal ou base64. Cependant, celles-ci nécessitent des bibliothèques d'assistance supplémentaires car elles ne sont pas définies dans l'API standard.
En respectant ces directives et en utilisant un encodage approprié, vous pouvez résoudre les écarts entre les tableaux d'octets et les chaînes dans votre processus de chiffrement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!