>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 암호화된 데이터를 해독할 수 없는 이유는 무엇입니까?

MySQL에서 암호화된 데이터를 해독할 수 없는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-19 03:20:02732검색

Why Can't I Decrypt Encrypted Data in MySQL?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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