728x90

SEED PHP 파일은 http://seed.kisa.or.kr/iwt/ko/index.do 에 가면 있다.

KISA 사이트는 소스가 PHP 인지 JSP 인지 식별이 어렵게 do 라는 확장자를 사용했다는 걸 알 수 있다.


알림마당 -> 자료실에서 PHP 버전을 찾아서 다운로드 받을 수 있다.

http://seed.kisa.or.kr/iwt/ko/bbs/EgovReferenceList.do?bbsId=BBSMSTR_000000000002


   [암호화 및 복호화 과정]


SEED는 128비트의 암⋅복호화키를 이용하여 임의의 길이를 갖는 입력 메시지를 128비트의 블록단위로 처리하는 128비트 블록암호 알고리즘이다. 따라서 임의의 길이를 가지는 평문 메시지를 128비트씩 블록단위로 나누어 암호화하여 암호문을 생성한다.


예제를 실행해보니 복호화가 제대로 안된다.

이걸 일일이 분석해볼 시간도 없고 능력도 안되어서 바로 포기했다.


그리고 구글링해서 다른 걸 찾아냈다.

http://qnibus.com/blog/how-to-use-seed128-for-php/

https://github.com/qnibus/seed128/


class.seed.php 파일을 만든 분의 사이트에 가서 class.seed.php 파일 내용을 수정하라고 나온다.


필요한 파일 class.crypto.php, class.seed.php 2개를 폴더에 복사 및 수정해서 소스 디렉토리에 저장한다.


사용법

ㅇ class.crypto.php 파일 내에 있는 $pbUserKey 값은 수정해서 사용한다.

ㅇ $IV 값도 수정해서 사용한다.


<?php
    include 'phpclass/class.crypto.php';
    $crypto = new Crypto(); // 암호화 객체 생성
    $text ='암호화할 문장을 여기에 적어주시면 됩니다.';
    $enc = $crypto->encrypt($text);
    echo $enc.'<br /> 원문 길이 : '.strlen($text).'  암호화 길이 : '.strlen($enc).'<br />';
    $dec = $crypto->decrypt($enc);
    echo $dec;
?>


평문($text)의 길이가 길면 비례해서 암호문의 길이도 길어진다.

그러므로 DB column 설계시 고려해서 해야 한다.

개인정보인 전화번호를 암호화 저장하는게 안전할 거 같아서 테스트를 해보니 암호화시 32 bytes 가 된다.

DB에 암호화 저장하고 화면에 보여줄 때 복호화해서 보여주면 된다.


Android 와 연동해서 테스트는 아직 안해봤다.


블로그 이미지

Link2Me

,