Beispielcode für PHP zur Schnittstelle mit der AES/ECB/PKCS5Padding-Verschlüsselungsmethode von Java (Bild)

黄舟
Freigeben: 2023-03-07 06:54:02
Original
7636 Leute haben es durchsucht

Aufgrund der Projektanforderungen müssen wir eine Schnittstelle zu einer Versicherungsgesellschaft herstellen, um die API aufzurufen. Unser Unternehmen ist ein PHP-Backend, und das Versicherungsunternehmen ist ein Java-Backend Die Datenübertragung in der Mitte muss verschlüsselt und entschlüsselt werden, die derzeit beliebte Verschlüsselung AES wird empfohlen.

Während des Andockvorgangs ist es unvermeidlich, durch Berge und Flüsse zu fahren

Das Folgende sind die Verschlüsselungsanweisungen des Unternehmens, mit dem ich verbunden bin:

Beispielcode für PHP zur Schnittstelle mit der AES/ECB/PKCS5Padding-Verschlüsselungsmethode von Java (Bild)

Sie müssen sich über Ihre eigene Verschlüsselungsmethode im Klaren sein, sonst führt der Unterschied zwischen einem Verschlüsselungsmodus ECB und CBC zu sehr unterschiedlichen Ergebnissen.

Fügen Sie den endgültigen verwendbaren Code hinzu:

<?php
class Security {
    public static function encrypt($input, $key) {
    $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
    $input = Security::pkcs5_pad($input, $size);
    $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, &#39;&#39;, MCRYPT_MODE_ECB, &#39;&#39;);
    $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
    mcrypt_generic_init($td, $key, $iv);
    $data = mcrypt_generic($td, $input);
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    $data = base64_encode($data);
    return $data;
    }
  
    private static function pkcs5_pad ($text, $blocksize) {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }
  
    public static function decrypt($sStr, $sKey) {
        $decrypted= mcrypt_decrypt(
        MCRYPT_RIJNDAEL_128,
        $sKey,
        base64_decode($sStr),
        MCRYPT_MODE_ECB
    );
 
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s-1]);
        $decrypted = substr($decrypted, 0, -$padding);
        return $decrypted;
    }  
}
  
  
  
// $key = "1234567891234567";
// $data = "example";
  
// $value = Security::encrypt($data , $key );
// echo "加密::".$value.&#39;<br/>&#39;;
// echo Security::decrypt($value, $key );
Nach dem Login kopieren

Öffentlich Aufgerufene Funktion :

/**
     * request body加密
     * @param array $content 投保人的信息
     * @return string
     */
    function hetai_encrypt($content) {
         
        // 方案七
        print_r("\r\n");
        vendor(&#39;encrypt.Security&#39;) or die("方案7引入失败");
        $sec = new \Security();
        $string = $content;
        $sec_res = $sec->encrypt($string, base64_decode("eeSvvVtUDLi5lTBHDjCeFw=="));
        $sec_res = strToHex($sec_res);// 结果转16进制并转成大写
        // 这里做了好几次的转换
        // 只是为了迎合出来我需要的结果而已
        // 根据自己的加密要求来定
        $encrypt_upper = strToHex(base64_decode(hexToStr($sec_res)));
        var_dump("\r\n方案7加密的结果\r\n" . $encrypt_upper);
        // 解密
        $sec_res_lower = strtolower($sec_res);// 转小写
        $sec_res_lower_tostr = hexToStr($sec_res);// 16进制转成string
        $sec_dec = $sec->decrypt($sec_res_lower_tostr, base64_decode("eeSvvVtUDLi5lTBHDjCeFw=="));
        var_dump("\r\n方案7解密的结果\r\n" . $sec_dec);
        return $encrypt_upper;
         
    }
Nach dem Login kopieren

BinärStringKonvertieren Hexadezimal, Hexadezimalzeichenfolge in Binärdatei:

/**
     * 字符串转十六进制
     * @param string $string
     * @return string
     */
    function strToHex($string)
    {
        $hex="";
        for($i=0;$i<strlen($string);$i++)
            $hex.=dechex(ord($string[$i]));
        $hex=strtoupper($hex);
        return $hex;
    }
     
    /**
     * 十六进制转字符串
     * 16进制的转为2进制字符串    
     * @param 十六进制 $hex
     * @return string
     */
    function hexToStr($hex)
    {
        $string="";
        for($i=0;$i<strlen($hex)-1;$i+=2)
            $string.=chr(hexdec($hex[$i].$hex[$i+1]));
        return  $string;
    }
Nach dem Login kopieren

Anbei ist der Verschlüsselungsfunktionsblock, der mich drei Tage lang gequält hat, nur zur Erinnerung, kommentieren Sie nicht, wenn es Ihnen nicht gefällt~

Beispielcode für PHP zur Schnittstelle mit der AES/ECB/PKCS5Padding-Verschlüsselungsmethode von Java (Bild)

Das obige ist der detaillierte Inhalt vonBeispielcode für PHP zur Schnittstelle mit der AES/ECB/PKCS5Padding-Verschlüsselungsmethode von Java (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!