include_once($_SERVER['DOCUMENT_ROOT']."/common/lib/KISA_SEED_CBC.php"); function hexToStr($hex){ $string=''; for ($i=0; $i < strlen($hex)-1; $i+=2){ $string .= chr(hexdec($hex[$i].$hex[$i+1])); } return $string; } // echo hexToStr('39,f8,4d,2a,b0,0c,90,5e,d4,ec,ef,c7,2a,75,80,eb'); // exit; echo implode(unpack("C*", "32,31,EB,91,90,34,39,31,36")); exit; $g_bszUser_key = null; if(isset($_POST['KEY'])) $g_bszUser_key = $_POST['KEY']; if($g_bszUser_key == null) { $g_bszUser_key = "ab,c1,23,ab,c1,23,ab,c1,23,aa,aa,aa,aa,aa,aa,aa"; // $g_bszUser_key = "abc123abc123abc123aaaaaaaaaaaaaa"; } $g_bszIV = null; if(isset($_POST['IV'])) $g_bszIV = $_POST['IV']; if($g_bszIV == null) { $g_bszIV = "26,8d,66,a7,35,a8,1a,81,6f,ba,d9,fa,36,16,25,01"; } function encrypt($bszIV, $bszUser_key, $str) { $planBytes = explode(",",$str); $keyBytes = explode(",",$bszUser_key); $IVBytes = explode(",",$bszIV); for($i = 0; $i < 16; $i++) { $keyBytes[$i] = hexdec($keyBytes[$i]); $IVBytes[$i] = hexdec($IVBytes[$i]); } for ($i = 0; $i < count($planBytes); $i++) { $planBytes[$i] = hexdec($planBytes[$i]); } if (count($planBytes) == 0) { return $str; } $ret = null; $bszChiperText = null; $pdwRoundKey = array_pad(array(),32,0); //방법 1 $bszChiperText = KISA_SEED_CBC::SEED_CBC_Encrypt($keyBytes, $IVBytes, $planBytes, 0, count($planBytes)); $r = count($bszChiperText); for($i=0;$i< $r;$i++) { $ret .= sprintf("%02X", $bszChiperText[$i]).","; } return substr($ret,0,strlen($ret)-1); /* // 방법 2 $info = new KISA_SEED_INFO(); $message_length = count($planBytes); KISA_SEED_CBC::SEED_CBC_init( $info, KISA_ENC_DEC::KISA_ENCRYPT, $keyBytes, $IVBytes ); $process_blockLeng = 32; $outbuf = array_pad(array(), $process_blockLeng/4, 0); for($i = 0; $i < $message_length-$process_blockLeng; ) { Common::arraycopy_system($planBytes, $i, $pbszPlainText, 0, $process_blockLeng); $data = KISA_SEED_CBC::chartoint32_for_SEED_CBC($pbszPlainText, $process_blockLeng); KISA_SEED_CBC::SEED_CBC_Process( $info, $data, $process_blockLeng, $outbuf, $nRetOutLeng ); $cdata = KISA_SEED_CBC::int32tochar_for_SEED_CBC($outbuf, $nRetOutLeng); Common::arraycopy_system($cdata, 0, $pbszCipherText, $i, $nRetOutLeng ); $i+= $nRetOutLeng; } $remainleng = $message_length%$process_blockLeng; if($remainleng==0) { $remainleng = $process_blockLeng; } Common::arraycopy_system($planBytes, $i, $pbszPlainText, 0, $remainleng); $data = KISA_SEED_CBC::chartoint32_for_SEED_CBC($pbszPlainText, $remainleng); KISA_SEED_CBC::SEED_CBC_Process( $info, $data, $remainleng, $outbuf, $nRetOutLeng ); $cdata = KISA_SEED_CBC::int32tochar_for_SEED_CBC($outbuf, $nRetOutLeng); Common::arraycopy_system($cdata, 0, $pbszCipherText, $i, $nRetOutLeng ); $i+= $nRetOutLeng; KISA_SEED_CBC::SEED_CBC_Close( $info, $outbuf, 0, $nPaddingLeng ); $cdata = KISA_SEED_CBC::int32tochar_for_SEED_CBC($outbuf, $nPaddingLeng); Common::arraycopy_system($cdata, 0, $pbszCipherText, $i, $nPaddingLeng ); $data = null; $cdata = null; $outbuf = null; for($i=0;$i< sizeof($pbszCipherText);$i++) { $ret .= sprintf("%02X", $pbszCipherText[$i]).","; } return substr($ret,0,strlen($ret)-1); */ } function decrypt($bszIV, $bszUser_key, $str) { $planBytes = explode(",",$str); $keyBytes = explode(",",$bszUser_key); $IVBytes = explode(",",$bszIV); for($i = 0; $i < 16; $i++) { $keyBytes[$i] = hexdec($keyBytes[$i]); $IVBytes[$i] = hexdec($IVBytes[$i]); } for ($i = 0; $i < count($planBytes); $i++) { $planBytes[$i] = hexdec($planBytes[$i]); } if (count($planBytes) == 0) { return $str; } $pdwRoundKey = array_pad(array(),32,0); $bszPlainText = null; // 방법 1 $bszPlainText = KISA_SEED_CBC::SEED_CBC_Decrypt($keyBytes, $IVBytes, $planBytes, 0, count($planBytes)); for($i=0;$i< sizeof($bszPlainText);$i++) { $planBytresMessage .= sprintf("%02X", $bszPlainText[$i]).","; } return substr($planBytresMessage,0,strlen($planBytresMessage)-1); /* // 방법 2 $info = new KISA_SEED_INFO(); $nCipherTextLen = count($pbszCipherText); $EncryptedMessage_length = count($planBytes); if($EncryptedMessage_length%KISA_SEED_CBC::BLOCK_SIZE_SEED) { return ""; } KISA_SEED_CBC::SEED_CBC_init( $info, KISA_ENC_DEC::KISA_DECRYPT, $keyBytes, $IVBytes ); $process_blockLeng = 32; $outbuf = array_pad(array(), $process_blockLeng/4, 0); for($i = 0; $i < $EncryptedMessage_length-$process_blockLeng; ) { Common::arraycopy_system($planBytes, $i, $pbszCipherText, 0, $process_blockLeng); $data = KISA_SEED_CBC::chartoint32_for_SEED_CBC($pbszCipherText,$process_blockLeng); KISA_SEED_CBC::SEED_CBC_Process( $info, $data, $process_blockLeng, $outbuf, $nRetOutLeng ); $cdata = KISA_SEED_CBC::int32tochar_for_SEED_CBC( $outbuf, $nRetOutLeng ); Common::arraycopy_system($cdata, 0, $pbszPlainText, $i, $nRetOutLeng ); $i+= $nRetOutLeng; } $remainleng = $EncryptedMessage_length%$process_blockLeng; if($remainleng==0) { $remainleng = $process_blockLeng; } Common::arraycopy_system($planBytes, $i, $pbszCipherText, 0, $remainleng); $data = KISA_SEED_CBC::chartoint32_for_SEED_CBC($pbszCipherText,$remainleng); KISA_SEED_CBC::SEED_CBC_Process( $info, $data, $remainleng, $outbuf, $nRetOutLeng ); if(KISA_SEED_CBC::SEED_CBC_Close( $info, $outbuf, $nRetOutLeng, $nPaddingLeng)) { $cdata = KISA_SEED_CBC::int32tochar_for_SEED_CBC( $outbuf, $remainleng-$nPaddingLeng ); Common::arraycopy_system($cdata, 0, $pbszPlainText, $i, $remainleng-$nPaddingLeng ); $message_length = $i+ $remainleng -$nPaddingLeng; $result = array_pad(array(), $message_length, 0); Common::arraycopy_system($pbszPlainText, 0, $result, 0, $message_length); $data = null; $cdata = null; $outbuf = null; for($i=0;$i< sizeof($result);$i++) { $planBytresMessage .= sprintf("%02X", $result[$i]).","; } return substr($planBytresMessage,0,strlen($planBytresMessage)-1); } return ""; */ } $enc = null; $dec = null; if(isset($_POST['ENC'])) $enc = $_POST['ENC']; if(isset($_POST['DEC'])) $dec = $_POST['DEC']; if($enc==null) { $enc2 = ""; } else { //암호화 시작 $g_bszPlainText = $enc; $enc2 = encrypt($g_bszIV, $g_bszUser_key, $g_bszPlainText); } if($dec==null) { $dec2 = ""; } else { //복호화 시작 $g_bszChiperText = $dec; $dec2 = decrypt($g_bszIV, $g_bszUser_key, $g_bszChiperText); } ?>