데이터의 암호화, 복호화하는 AES 함수 정보
데이터의 암호화, 복호화하는 AES 함수본문
[mysql] 데이터의 암호화, 복호화하는 AES 함수
mysql 에는 데이터를 암호화, 복호화하는 AES_ENCRYPT, AES_DECRYPT 함수가 있습니다. 이 암호화는 128비트 길이로 인코딩되어 저장됩니다. 그러나 소스를 수정해서 256비트까지 확장시킬수 있다고 합니다.
AES_ENCRYPT 는 문자열을 암호화하고, 바이너리 문자열을 반환하지만, AES_DECRYPT 는 암호화된 문자열을 복호화합니다. AES_DECRYPT 는 유효하지 않은 데이터는 padding을 감지하고, NULL을 반환합니다.
# "암호화 키"는 임의의 값이 올 수 있으며, "문자열"은 암호화하고자 하는 값이 됩니다.
# AES_ENCRYPT 암호화
INSERT INTO 테이블명 VALUES (HEX(AES_ENCRYPT('문자열', '암호화 키')));
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '암호화 키') FROM 테이블명;
예제 (ex #1
# AES_ENCRYPT 암호화
INSERT INTO tbname VALUE (HEX(AES_ENCRYPT('123456','가나다라')));
// 결과: 5A33E11DC0B638E4E5E74EBD52F55E3D
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '가나다라') FROM tbname;
암호화키는 상수로 정의해놓거나 해서 데이터 베이스의 정보가 노출되더라도 키가 없이는 열수 내용을 알수가 없습니다.
요세 주민번호는 잘 안받겠지만 개인정보인 연락처, 이메일 , 주민번호를 암호하 한다면 좋습니다.
mysql 에는 데이터를 암호화, 복호화하는 AES_ENCRYPT, AES_DECRYPT 함수가 있습니다. 이 암호화는 128비트 길이로 인코딩되어 저장됩니다. 그러나 소스를 수정해서 256비트까지 확장시킬수 있다고 합니다.
AES_ENCRYPT 는 문자열을 암호화하고, 바이너리 문자열을 반환하지만, AES_DECRYPT 는 암호화된 문자열을 복호화합니다. AES_DECRYPT 는 유효하지 않은 데이터는 padding을 감지하고, NULL을 반환합니다.
# "암호화 키"는 임의의 값이 올 수 있으며, "문자열"은 암호화하고자 하는 값이 됩니다.
# AES_ENCRYPT 암호화
INSERT INTO 테이블명 VALUES (HEX(AES_ENCRYPT('문자열', '암호화 키')));
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '암호화 키') FROM 테이블명;
예제 (ex #1
# AES_ENCRYPT 암호화
INSERT INTO tbname VALUE (HEX(AES_ENCRYPT('123456','가나다라')));
// 결과: 5A33E11DC0B638E4E5E74EBD52F55E3D
# AES_DECRYPT 복호화
SELECT AES_DECRYPT(UNHEX(필드명), '가나다라') FROM tbname;
암호화키는 상수로 정의해놓거나 해서 데이터 베이스의 정보가 노출되더라도 키가 없이는 열수 내용을 알수가 없습니다.
요세 주민번호는 잘 안받겠지만 개인정보인 연락처, 이메일 , 주민번호를 암호하 한다면 좋습니다.
추천
4
4
댓글 7개
참고하겠습니다 ^^

감사합니다. 추천!!

좋은정보입니다

스킨에서 별도로 특별 필드에 적용할만한 방법도 있을까요?
스킨에 특정필드의데이터가 varchar 형식이라면 가능합니다
skin write head 부분에서 암호화 처리후
view단에서는 복호화해서 보여주면 댑니다 디비에는 암호화 데이터가 들어가있구요
skin write head 부분에서 암호화 처리후
view단에서는 복호화해서 보여주면 댑니다 디비에는 암호화 데이터가 들어가있구요

답변 감사 드립니다.
쿼리문을 다시 만들어서 넣어줘야 한다는거네요?
혹시 회원db를 기준으로 말씀 하시는것 이신지요?
저는 일반 게시판을 기준으로 질문 드렸습니다만...
INSERT 트 또는 update 할때는
set wr_subject = HEX(AES_ENCRYPT('$wr_subject','key'))
이런식으로 한번의 쿼리문으로 하면 된다지만
보기에서 select * 도 한번 하고 (기본)
복호화 해주기위한 필드를 지정한 쿼리문을 별도로 수행해야 되나요?
즉 두번 쿼리 한다는것이 조금 걸려서요
그냥 php 에서 똑같은 복호가 가능하다면 좋을텐데요
질문이 잘 전달 될런지 걱정이네요.
어째든 감사 드립니다.
추가 질문도 있어요 ㅎㅎ
이미 암호화된 데이타를 복호키를 분실 했을경우 영원히 복구 불가 하겠네요.
대책은 없지요?
쿼리문을 다시 만들어서 넣어줘야 한다는거네요?
혹시 회원db를 기준으로 말씀 하시는것 이신지요?
저는 일반 게시판을 기준으로 질문 드렸습니다만...
INSERT 트 또는 update 할때는
set wr_subject = HEX(AES_ENCRYPT('$wr_subject','key'))
이런식으로 한번의 쿼리문으로 하면 된다지만
보기에서 select * 도 한번 하고 (기본)
복호화 해주기위한 필드를 지정한 쿼리문을 별도로 수행해야 되나요?
즉 두번 쿼리 한다는것이 조금 걸려서요
그냥 php 에서 똑같은 복호가 가능하다면 좋을텐데요
질문이 잘 전달 될런지 걱정이네요.
어째든 감사 드립니다.
추가 질문도 있어요 ㅎㅎ
이미 암호화된 데이타를 복호키를 분실 했을경우 영원히 복구 불가 하겠네요.
대책은 없지요?
디비로 한번에 불러올때 사용 할수도 있지만 php 에서도 사용 가능합니다
http://kr.php.net/manual/en/function.mcrypt-encrypt.php
이쪽이랑 같이 참조해서 보시면 될듯합니다.
http://kr.php.net/manual/en/function.mcrypt-encrypt.php
이쪽이랑 같이 참조해서 보시면 될듯합니다.