SEED는 한국인터넷진흥원에서 순수 국내기술로 개발된 암호화 알고리즘입니다. 이를 PHP용으로 전환해주신 mibany님께 감사드립니다. 저는 이를 이용해 CBC 모드로 운용할 수 있는 클래스와 64bit 환경에서 작동되도록 업데이트하였습니다. 검색을 해보니 이렇게 구현하고자 하시는분들이 계시는 것 같은데 공개된 소스코드는 없는 것 같아서 저같이 고생하지 마시라고 공개하오니 요긴하게 사용하시기 바랍니다.
- x86/x64 플랫폼 지원
- CBC(Cipher-block chaining) 운영모드 지원
- EUC-KR, UTF-8 문자셋 지원
====================
- 위 링크에서 class.seed.php를 다운로드 합니다.
class.seed.php
내EncRoundKeyUpdate1
함수를 다음과 같이 변경합니다.- 변경할
class.seed.php
파일을class.crypto.php
파일과 함께 원하는 곳으로 업로드합니다. class.crypto.php
를include
해서 사용하시면 됩니다.
private function EncRoundKeyUpdate1(&$K = array(), &$A, &$B, &$C, &$D, $Z) { $T0 = $C; $C = ( $C << 8 ) ^ ( $D >> 24 & 0x000000ff ); $D = ( $D << 8 ) ^ ( $T0 >> 24 & 0x000000ff ); $T00 = (int) $A + (int) $C - (int) $this->KC[$Z]; $T00 = $this->ConvertInt($T00); $T11 = (int) $B + (int) $this->KC[$Z] - (int) $D; $T11 = $this->ConvertInt($T11); $K[0] = $this->SS0[$this->GetB0($T00)] ^ $this->SS1[$this->GetB1($T00)] ^ $this->SS2[$this->GetB2($T00)] ^ $this->SS3[$this->GetB3($T00)]; $K[1] = $this->SS0[$this->GetB0($T11)] ^ $this->SS1[$this->GetB1($T11)] ^ $this->SS2[$this->GetB2($T11)] ^ $this->SS3[$this->GetB3($T11)]; // 64bit에서 정상적인 값을 반영하도록 추가 $C = (int) $C; if(PHP_INT_SIZE > 4) { $C = $C << 32; $C = $C >> 32; } $D = (int) $D; if(PHP_INT_SIZE > 4) { $D = $D << 32; $D = $D >> 32; } $K[0] = (int) $K[0]; if(PHP_INT_SIZE > 4) { $K[0] = $K[0] << 32; $K[0] = $K[0] >> 32; } $K[1] = (int) $K[1]; if(PHP_INT_SIZE > 4) { $K[1] = $K[1] << 32; $K[1] = $K[1] >> 32; } }
====================
아래와 같이 암호화 혹은 복호화를 원하는 곳에 넣어서 사용하세요! 실행 예제는 여기를 클릭하시면 보실 수 있습니다.
<?php include 'class.crypto.php'; $crypto = new Crypto(); echo $crypto->encrypt('여기는 안반장의 개발 노트입니다'); echo $crypto->decrypt('856ac21e3960225b3e6bf39b084279312485e58b578de7d1d418f6128111a341'); ?>