암호화의 맥락에서 바이트 배열을 문자열로 변환했다가 다시 반대로 변환하면 문제가 발생할 수 있으며 종종 값이 일치하지 않을 수 있습니다. 및 암호 해독 오류. 다음은 이러한 문제에 대한 탐색과 자세한 해결 방법입니다.
다음 암호화 시나리오를 고려하십시오.
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"); } }
그러나 암호화된 데이터를 문자열로 저장하는 것은 사람이 읽을 수 있는 용도로 사용되므로 권장되지 않습니다. 임의의 바이너리 데이터가 아닌 텍스트입니다. 불가피한 경우 바이트와 문자 간의 1:1 매핑이 포함된 인코딩을 사용하는 것이 중요합니다.
ISO-8859-1 인코딩
이 특정 시나리오의 경우 , ISO-8859-1 인코딩을 권장합니다:
String decoded = new String(encryptedByteArray, "ISO-8859-1"); byte[] encoded = decoded.getBytes("ISO-8859-1");
일반적인 인코딩 문제 방지
UTF-16 인코딩은 다음과 같은 이유로 문제를 일으킬 수 있습니다.
대체 인코딩
ISO-8859-1이 요구 사항을 충족하지 않는 경우 16진수 또는 base64 인코딩 사용을 고려해 보세요. 그러나 표준 API에 정의되어 있지 않기 때문에 추가 도우미 라이브러리가 필요합니다.
이러한 지침을 준수하고 적절한 인코딩을 사용하면 암호화 프로세스에서 바이트 배열과 문자열 간의 불일치를 해결할 수 있습니다.
위 내용은 바이트 배열과 문자열 간에 데이터를 암호화할 때 변환 문제를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!