Implementierung des PHP 3DES-Verschlüsselungsalgorithmus

巴扎黑
Freigeben: 2016-11-12 15:03:21
Original
1380 Leute haben es durchsucht

Was ich in letzter Zeit tun muss, ist, dass PHP eine 3des-verschlüsselte URL an .net zurückgibt und sie dann von der .net-Seite entschlüsselt wird. Die Implementierung von PHP konnte nie mit der von .net mithalten. Ich werde es hier zuerst aufschreiben und hoffe, einige Ratschläge von Experten zu erhalten. Es gibt unzählige Leute im Internet, die es kopieren, ohne es persönlich zu überprüfen. Ich hoffe, dass sich in Zukunft jeder an die strenge Methode halten kann.

Bevor die PHP-Verschlüsselungserweiterungsbibliothek Mcrypt Daten verschlüsselt und entschlüsselt, erstellt sie zunächst einen Initialisierungsvektor, kurz iv genannt. Aus $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher,$modes),MCRYPT_RAND); ist ersichtlich, dass zum Erstellen eines Initialisierungsvektors zwei Parameter erforderlich sind: size gibt die Größe von iv an; source ist die Quelle von iv, und der Wert ist MCRYPT_RAND die Zufallszahl des Systems.

Die Funktion mcrypt_get_iv_size($cipher,$modes) gibt die Initialisierungsvektorgröße zurück. Die Parameter cipher und mode beziehen sich auf den Algorithmus bzw. den Verschlüsselungsmodus.

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;
 }
Nach dem Login kopieren
 function pkcs5_pad ($text, $blocksize) {
 $pad = $blocksize - (strlen($text) % $blocksize);
 return $text . str_repeat(chr($pad), $pad);
 }
Nach dem Login kopieren

Der Code auf der .net-Seite ist wie folgt implementiert:

 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));
Nach dem Login kopieren

Ich habe eine andere Implementierungsmethode von PHP gefunden, von denen keine funktioniert.

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进制
       }
Nach dem Login kopieren

Es gibt unzählige Leute im Internet, die kopieren und kopieren, ohne es persönlich zu überprüfen. Ich hoffe, dass sich in Zukunft jeder an die strenge Methode halten kann.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage