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:
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, '', MCRYPT_MODE_ECB, ''); $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.'<br/>'; // echo Security::decrypt($value, $key );
Öffentlich Aufgerufene Funktion :
/** * request body加密 * @param array $content 投保人的信息 * @return string */ function hetai_encrypt($content) { // 方案七 print_r("\r\n"); vendor('encrypt.Security') 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; }
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; }
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~
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!