그러냐

[함수] 간단한 암호화/복호화 함수 본문

php

[함수] 간단한 암호화/복호화 함수

관절분리 2016. 2. 22. 18:06
반응형
<?
function EnCode($sText, $sCode) {
  $cntData = strlen($sText) - 1;
  $cntCode = strlen($sCode) - 1;
   
  $arrData = array();
  $arrCode = array();
   
 
  for($i = 0;$cntData >= $i; $i++)
    $arrData[$i] = $sText[$i];
 
  for($i = 0;$cntCode >= $i; $i++)
    $arrCode[$i] = $sCode[$i];
   
  $flag = 0;
  $strResult = "";
 
  for($i = 0;$cntData >= $i; $i++) {
 
    $strResult = $strResult . (ord($arrData[$i]) ^ ord($arrCode[$flag])) . chr(8);
 
    if($flag == $cntCode)
      $flag = 0;
    else
      $flag++;
  }
 
  return base64_encode($strResult);
}
 
 
function DeCode($sText, $sCode) {
 
  $sText = base64_decode($sText);
   
  $arrData = split(chr(8), $sText);
  $arrCode = array();
 
  $cntData = count($arrData) - 2;
  $cntCode = strlen($sCode) - 1;
   
  for($i = 0; $cntCode >= $i; $i++)
    $arrCode[$i] = $sCode[$i];
   
  $flag = 0;
  $strResult = "";
 
  for($i = 0;$cntData >= $i; $i++) {
    $strResult = $strResult . chr((int)($arrData[$i]) ^ ord($arrCode[$flag]));
     
    if($flag == $cntCode)
      $flag = 0;
    else
      $flag++;
  }
 
  return $strResult;
}
 
$testData = "안녕하세요";
$testKey = "asdjhhjksa";
 
$encodingData = EnCode($testData, $testKey);
$decodingData = DeCode($encodingData, $testKey);
 
echo "$encodingData ";
echo "$decodingData ";
 
$testData = "I am a Boy!! You are a Girl!!";
$testKey = "aaaa";
 
$encodingData = EnCode($testData, $testKey);
$decodingData = DeCode($encodingData, $testKey);
 
echo "$encodingData ";
echo "$decodingData ";
?>
 
여기서 sCode 는 열쇠코드 입니다. 이걸모르면 암호를 풀수가 없죠
sText의 바이트문자를 sCode의 바이트 문자로 XOR 한 것입니다. 예를 들어
sText  = "test"
sCode  = "key" 이면
 
t XOR k
e XOR e
s XOR y
t XOR k
이런식으로 암호화시킵니다.
실제연산은 아스키코드값으로 합니다.
실제 암호화된 데이터는 "3101031"이며
""로 구분됩니다. (참고로    CHR(8) 입니다.)
 
DeCode함수에서는 암호화된 데이터를
키값을 이용해 풉니다.
 
PHP에 암호화/복호화 함수가 있지만 다른언어와 함께 쓸수있겠죠~^^;
예들들어 PHP <=> ASP 간에 데이터암호화해서 통신할수있겠죠..
 
==========================================
반응형