>백엔드 개발 >PHP 튜토리얼 >PHP 3DES 암호화 알고리즘 구현

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

巴扎黑
巴扎黑원래의
2016-11-21 13:49:362578검색

최근에 해야 할 일은 PHP가 3des 암호화된 URL을 .net에 반환한 다음 .net 측에서 이를 해독하는 것입니다. PHP의 구현은 .net 끝과 일치할 수 없었습니다. 먼저 여기에 적어두고 전문가의 지침을 보도록 하겠습니다. 인터넷에는 직접 확인도 하지 않고 복사하고 복사하는 사람들이 셀 수 없이 많습니다. 앞으로도 모두가 엄격한 방법을 고수하기를 바랍니다.

PHP 암호화 확장 라이브러리 Mcrypt는 데이터를 암호화하고 해독하기 전에 먼저 iv라는 초기화 벡터를 생성합니다. $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND); 에서 초기화 벡터를 생성하려면 두 개의 매개변수가 필요하다는 것을 알 수 있습니다. size는 iv의 크기를 지정하고 MCRYPT_RAND 값은 다음과 같습니다. 시스템 난수.

mcrypt_get_iv_size($cipher,$modes) 함수는 초기화 벡터 크기를 반환합니다. cipher 및 mode 매개변수는 각각 알고리즘과 암호화 모드를 나타냅니다.

Php 코드

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;  
 }

Php 코드

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

.net 측 코드는 다음과 같이 구현됩니다.

C# 코드

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));

PHP를 구현하는 다른 방법을 찾았지만 작동하지 않습니다.

PHP 코드

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进制  
  
       }


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP의 상식 요약다음 기사:PHP의 상식 요약