PHP 3DES 암호 화 알고리즘 구현

더 읽 기
최근 에 해 야 할 일 은 php 에서 3des 암호 화 된 URL 을. net 에 되 돌려 주 고. net 에서 복호화 합 니 다.php 의 실현 은. net 단 과 일치 하지 않 습 니 다. 먼저 여기에 기억 하 세 요. 보고 싶 은 큰 신의 조언 입 니 다.인터넷 상에 서 베껴 서 옮 기 는 수많은 사람들 이 직접 검증 한 적 이 없 으 니 앞으로 엄밀 한 방식 을 계승 해 주시 기 바 랍 니 다.
 
PHP 암호 화 확장 라 이브 러 리 Mcrypt 은 데이터 암호 화 와 복호화 에 앞서 iv 라 고 부 르 는 초기 화 벡터 를 만 들 었 습 니 다.$iv = mcryptcreate_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND);초기 화 벡터 를 만 들 려 면 두 개의 인자 가 필요 합 니 다. size 는 iv 의 크기 를 지정 합 니 다.source 는 iv 의 소스 이 며, 그 중 값 은 MCRYPT 입 니 다.랜 드 는 시스템 난수 입 니 다.
함수 mcryptget_iv_size ($cipher, $modes) 는 초기 화 벡터 크기 를 되 돌려 줍 니 다. 매개 변수 cipher 와 mode 는 각각 알고리즘 과 암호 화 모드 를 말 합 니 다.
 
function encrypt($input){//    
 $key=md5("XXXXXXXXX",TRUE);
 $key=base64_encode($key);
 $size = mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_ECB);
 $input = $this->pkcs5_pad($input, $size);
 //$key = str_pad($this->key,24,'0');
 $key = str_pad($key,24,'0');
 $td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_ECB, '');
// $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);//     
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES,MCRYPT_MODE_ECB), MCRYPT_RAND);
 @mcrypt_generic_init($td, $key, $iv);
 $data = mcrypt_generic($td, $input);
 mcrypt_generic_deinit($td);
 mcrypt_module_close($td);
 //    $data = base64_encode($this->PaddingPKCS7($data));
 $data = base64_encode($data);
 return  $data;
 }

 
 function pkcs5_pad ($text, $blocksize) {
 $pad = $blocksize - (strlen($text) % $blocksize);
 return $text . str_repeat(chr($pad), $pad);
 }

 .net 사 이 드 코드 는 다음 과 같 습 니 다.
   var des = new TripleDESCryptoServiceProvider();
                var hashMd5 = new MD5CryptoServiceProvider();

                des.Key = hashMd5.ComputeHash(Encoding.Default.GetBytes(strKey));
                des.Mode = CipherMode.ECB;
                des.Padding = PaddingMode.Zeros;

                var desEncrypt = des.CreateEncryptor();
                var buffer = Encoding.Default.GetBytes(strString);
                return Convert.ToBase64String(desEncrypt.TransformFinalBlock(buffer, 0, buffer.Length));

 
 
phop 의 또 다른 실현 방식 을 알 아 냈 으 니 모두 안 됩 니 다.
function encrypt($string) {

              //         

               $key=md5("XXXXXXXXXXXX",TRUE);
               $key=base64_encode($key);

              //     

              $cipher_alg = MCRYPT_TRIPLEDES;

              //            

              $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND); 

               

              //     

              $encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv); 

              return base64_encode($encrypted_string);//   16  

       }

 
 
인터넷 상에 서 베껴 서 옮 기 는 수많은 사람들 이 직접 검증 한 적 이 없 으 니 앞으로 엄밀 한 방식 을 계승 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기