鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全  HTML/ jsAES 加密php怎么對接

jsAES 加密php怎么對接

這是js代碼

function encrypt (text, originKey) {
    var originKey = originKey.slice(0, 16),
        key = CryptoJS.enc.Utf8.parse(originKey),
        iv = CryptoJS.enc.Utf8.parse(originKey),
        msg = JSON.stringify(text)
    var ciphertext = CryptoJS.AES.encrypt(msg, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return ciphertext.toString()
}

這是我的php代碼

 public function encrypt ($text, $keys){
        $text = json_encode($text);
        $text =$this->addPKCS7Padding($text);
        $key = substr($keys,0, 16);
        $iv = substr($keys,0, 16);
        $encrypt_str = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);
        return base64_encode($encrypt_str);
    }

addPKCS7Padding函數(shù)的代碼
、

 public function addPKCS7Padding($source) {
        $source = trim($source);
        $block = mcrypt_get_block_size('rijndael-128', 'cbc');
        $pad = $block - (strlen($source) % $block);
        if ($pad <= $block) {
            $char = bin2hex($pad);
            $source .= str_repeat($char, $pad);
        }
        return $source;
    }

這樣加密出來的數(shù)據(jù)一直不對

回答
編輯回答
莫小染
class EncryAes
{
    static function encrypt($data,$key,$iv)
    {
        $cipher = MCRYPT_RIJNDAEL_128;
        $mode = MCRYPT_MODE_CBC;
        $data=json_encode($data);
        $encrypt_data = mcrypt_encrypt($cipher, $key, $data, $mode, $iv);
        $data= base64_encode($encrypt_data);
        return $data;
    }

    static function decrypt($data,$key,$iv)
    {
        $cipher = MCRYPT_RIJNDAEL_128;
        $mode = MCRYPT_MODE_CBC;
        $decrypt_data=base64_decode($data);
        $data = mcrypt_decrypt($cipher, $key,$decrypt_data , $mode, $iv);
        $data =rtrim($data);
        $data=json_decode($data, true);
        //$data = rtrim(rtrim($data), "..");
        return $data;
    }

    
}

更多請參考http://phpseclib.sourceforge.net

2017年2月15日 18:38