php7 openssl_decrypt AES的ECB與CBC加解密

    php7.2版本用openssl_encrypt代替mcrypt_encrypt,致使以往本身寫的Aes加密類不能用。php

    此次項目客戶端用的是 AES-128-ECB 加密,我用在線AES工具來測試,發現本身寫的加解密方法獲得的值不同。而最終發現是加密的key不是16位長,致使ios客戶端與服務器php的加解密不一致。後商討key爲16位長,遂問題解決。下面是 AES-128-ECB 加密類;ios

class Aes
{
    //密鑰 須是16位
    public $key ;

    /**
     * 解密字符串
     * @param string $data 字符串
     * @return string
     */
    public function __construct()
    {
    	$this->key = '1234567890123456';
    }

    public  function decode($str)
    {
        return openssl_decrypt(base64_decode($str),"AES-128-ECB",$this->key,OPENSSL_RAW_DATA);
    }

    /**
     * 加密字符串
     * @param string $data 字符串
     * @return string
     */
    public  function encode($str)
    {
        return base64_encode(openssl_encrypt($str,"AES-128-ECB",$this->key,OPENSSL_RAW_DATA));
    }

}

若你是採用CBC加密,則還需排序$iv偏移量,以下面是AES-128-CBC加解密類:服務器

class Aes
{
    //密鑰 須是16位
    public $key ;

    //偏移量
    public $iv = '1234567890123456';

    /**
     * 解密字符串
     * @param string $data 字符串
     * @return string
     */
    public function __construct()
    {
    	$this->key = '1234567890123456';
    }

    public  function decode($str)
    {
        return openssl_decrypt(base64_decode($str),"AES-128-CBC",$this->key,OPENSSL_RAW_DATA, $this->iv);
    }

    /**
     * 加密字符串
     * @param string $data 字符串
     * @return string
     */
    public  function encode($str)
    {
        return base64_encode(openssl_encrypt($str,"AES-128-CBC",$this->key,OPENSSL_RAW_DATA, $this->iv));
    }

}
相關文章
相關標籤/搜索