CI 묻고 답하기

제목 encrypt 암호화 질문드리겠습니다.
글쓴이 해행행 작성시각 2016/03/02 09:03:05
댓글 : 7 추천 : 0 스크랩 : 0 조회수 : 18602   RSS

회원가입시 pw를  $this->encrypt->encode() 를통해 암호화하여 DB에 넣고

로그인시 pw 또한 $this->encrypt->encode() 암호화 처리를하여

DB의 pw와 비교를 해줄려고 했습니다.

 

설정까지 마쳐서 암호화는 정상적으로 되나 회원가입시 pw를 $this->encrypt->decode() 하면 false() 값이 찍힙니다.

의아해서 로그인시 pw를 $this->encrypt->encode() 암호화 처리하고 바로 $this->encrypt->decode() 하면 정상적으로 원래값으로 돌아옵니다.

DB에 암호화하여 넣은 값만 bool(false)  로 찍힙니다.

 

제가 설정부분이라던지 놓친것이라던지 잘못한 부분이있을까요?

 

이부분은 회원가입시 암호화 코드입니다.

 

$pw = $this->input->post('pw', TRUE);
			
$amho = $this->encrypt->encode($pw);									//암호화

 

 다음글 ci / 액티브레코드 / join 사용할때 컬럼이름이 ... (2)
 이전글 CSRF true시 만드는 쿠키값에 대하여 질문이있습니... (1)

댓글

해행행 / 2016/03/02 09:16:28 / 추천 0

혹 이미 비슷한 내용이 포럼게시판에 있는데 제가 찾지 못하고 올린거라면 정말 뻔뻔하고 죄송합니다만

링크좀 남겨주시면 정말 정말 감사하겟습니다.

kaido / 2016/03/02 09:23:12 / 추천 1

기본적으로 회원 암호는 복호화가 되지 않는 암호를 사용하셔야 합니다.

 

복호를하기전에 값을 직접 찍어보세요.

암호한 값과 [이미 암호처리가 된]db 에서 불러온 값이 일치 하지 않을 경우의 수는 2가지 입니다.

DB 인코딩이 다르거나, 패스워드 저장하는 필드의 길이가 부족하거나.

CI 때문에 문제가 생기지는 않습니다.

해행행 / 2016/03/02 09:33:31 / 추천 0

//kaido 

음... 저도 kaido님이 말씀해주신 문제일까하고 고민을 해봤었습니다.

패스워드 저장하는 필드 길이가 부족한줄알고 처음에 varchar(20)에서 varchar(200) 까지 늘려줬는데 부족한걸까요?

아니면 DB인코딩이 다르다는 부분은 어떻게 해결을해야할까요?

지금현재 DB 생성할때에 utf-8로 설정을해주고 테이블설정할때는 기본값으로 줬었습니다.

그리고 DB에서 값을불러올떄 필드값 그대로 가지고 오는데도 decode는 먹히질않습니다.

답을 주셧는데도 제가부족하여 이렇게 또 여쭙게되어 죄송합니다.

 

/ 2016/03/02 10:45:04 / 추천 1

@해행행

개인정보 관련하여 몇일전에 알아봤는데 패스워드는 복화화가 되면 안되요..

$this->encrypt->encode 는 복호화가 되는 알고리즘이죠...

해시함수(https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98) 해시함수도 잘알아보시고

(찾아보니 보안등급도 안전한게 있네요.. )

안전한걸로 사용해서 저장하시고 비교는 다시 해시함수로 돌려서 같은지 틀린지 비교하시면 되요...

해행행 / 2016/03/02 12:45:57 / 추천 0

//닉 

그럼 encode는 쓰면안되겠네요. 

그런데 뭔가 해결을못하고 다른걸로 넘어갈려니 찝찝하네요 ㅜㅜ

 

변종원(웅파) / 2016/03/02 14:54:13 / 추천 1

지금 포럼소스나 구 포럼소스 보시면 명확해지실 겁니다.

암호화하지 않은 비밀번호를 받아서 암호화한 값과 db에 저장되어 있는 암호화 값을 비교하는 겁니다.

비밀번호는 절대로 복호화가 되어서는 안됩니다.

해행행 / 2016/03/03 15:54:17 / 추천 0

//변종원(웅파), 닉

넵 결국엔 hash로 해결했습니다. 감사합니다 ^^

 

지금 포럼소스나 구 포럼소스는 어디에서 볼수있을까요?

혹시 f12를 통한 개발자메뉴얼로 프론트엔드 외에도 볼 수 있는건가요? 

암호화 쪽이면 백엔드쪽일텐데 궁금합니다.