MySQL에서 암호화된 데이터를 해독할 수 없습니다
MySQL에서는 AES_ENCRYPT() 함수를 사용하여 데이터를 암호화하고 AES_DECRYPT()는 암호화된 데이터를 해독하는 데 사용됩니다. 그러나 암호화된 데이터를 쿼리할 때 사용자는 해독된 데이터가 표시되지 않는 문제에 직면할 수 있습니다.
이 문제를 해결하려면 AES_ENCRYPT()는 바이너리 문자열을 반환하는 반면 AES_DECRYPT()는 바이너리 문자열을 반환한다는 점을 이해하는 것이 중요합니다. 원래 문자열. 따라서 암호화된 데이터를 선택할 때 해독된 결과를 명시적으로 문자열로 다시 캐스팅해야 합니다.
예를 들어 다음 테이블을 고려하세요.
CREATE TABLE `user` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `first_name` VARBINARY(100) NULL, `address` VARBINARY(200) NOT NULL, PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;
데이터를 테이블에 삽입할 수 있습니다. AES_ENCRYPT() 함수 사용:
INSERT INTO user (first_name, address) VALUES (AES_ENCRYPT('Obama', 'usa2010'), AES_ENCRYPT('Obama', 'usa2010'));
그러나 암호화된 데이터를 쿼리할 때 다음 쿼리는 원래 문자열을 표시하지 않습니다.
SELECT AES_DECRYPT(first_name, 'usa2010'), AES_DECRYPT(address, 'usa2010') FROM user;
대신 해독된 결과는 다음과 같습니다. 보이지 않는 바이너리 문자열. 이 문제를 해결하려면 쿼리를 수정하여 해독된 데이터를 다시 문자열로 변환할 수 있습니다.
SELECT *, CAST(AES_DECRYPT(first_name, 'usa2010') AS CHAR(50)) first_name_decrypt FROM user
이제 first_name_decrypt 열에 원래 문자열이 포함되어 사용자가 예상대로 데이터를 볼 수 있습니다.
위 내용은 MySQL에서 암호화된 데이터를 해독할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!