>Java >java지도 시간 >바이트 배열과 문자열 간에 데이터를 암호화할 때 변환 문제를 방지하려면 어떻게 해야 합니까?

바이트 배열과 문자열 간에 데이터를 암호화할 때 변환 문제를 방지하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-19 09:15:03303검색

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

암호화에서 바이트 배열과 문자열 간의 변환 문제 해결

암호화의 맥락에서 바이트 배열을 문자열로 변환했다가 다시 반대로 변환하면 문제가 발생할 수 있으며 종종 값이 일치하지 않을 수 있습니다. 및 암호 해독 오류. 다음은 이러한 문제에 대한 탐색과 자세한 해결 방법입니다.

다음 암호화 시나리오를 고려하십시오.

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 인코딩은 다음과 같은 이유로 문제를 일으킬 수 있습니다.

  • String.getBytes("UTF-16")는 바이트 순서 표시 문자를 추가합니다.
  • 모든 바이트 시퀀스를 UTF-16 문자로 매핑할 수 있는 것은 아닙니다(예: 잘못된 문자 매핑이 있는 4바이트 시퀀스). ).

대체 인코딩

ISO-8859-1이 요구 사항을 충족하지 않는 경우 16진수 또는 base64 인코딩 사용을 고려해 보세요. 그러나 표준 API에 정의되어 있지 않기 때문에 추가 도우미 라이브러리가 필요합니다.

이러한 지침을 준수하고 적절한 인코딩을 사용하면 암호화 프로세스에서 바이트 배열과 문자열 간의 불일치를 해결할 수 있습니다.

위 내용은 바이트 배열과 문자열 간에 데이터를 암호화할 때 변환 문제를 방지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.