ホームページ  >  記事  >  バックエンド開発  >  Java の AES/ECB/PKCS5Padding 暗号化メソッドとインターフェイスするための PHP のサンプル コード (写真)

Java の AES/ECB/PKCS5Padding 暗号化メソッドとインターフェイスするための PHP のサンプル コード (写真)

黄舟
黄舟オリジナル
2017-03-28 10:07:567730ブラウズ

プロジェクトのニーズにより、APIを呼び出すために保険会社とのインターフェースが必要です。当社はバックエンドとしてPHPを使用しており、保険会社はバックエンドとしてJavaを使用しています。中。現在普及している暗号化 AES の方が推奨されます。

ドッキングの過程で、山や川を通過することは避けられません

私が接続した会社の暗号化手順は次のとおりです:

Java の AES/ECB/PKCS5Padding 暗号化メソッドとインターフェイスするための PHP のサンプル コード (写真)

独自の暗号化方法を必ず知ってください。暗号化モード ECB と CBC を使用すると、結果は大きく異なります。

使用できる最終コードを添付します:

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

パブリックで呼び出します関数:

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

BinaryString16進数に変換、16進数の文字列をバイナリに変換します:

/**
     * 字符串转十六进制
     * @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;
    }

添付は私を3回苦しめたメソッドです暗号化機能ブロックは自分自身のリマインダーのためだけです。気に入らない場合はスプレーしないでください~

Java の AES/ECB/PKCS5Padding 暗号化メソッドとインターフェイスするための PHP のサンプル コード (写真)

以上がJava の AES/ECB/PKCS5Padding 暗号化メソッドとインターフェイスするための PHP のサンプル コード (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。