一个简简单单的AES-256-CBC加密解密

技能 · 2020-07-03 · 1296 人浏览
一个简简单单的AES-256-CBC加密解密

如果要加密数组请在加密前json_encode(数组)
需要获取加密的数据时请在解密前json_decode(加密字符串)
在别人不知道key和iv的情况下,让他解到地球爆炸都解不出来

强烈建议加密密钥(key)与初始向量(iv)全部都使用随机数(指每个用户都有不同的key和iv),在泄露了一个用户的key和iv的时候让攻击者无法解密其他用户的数据,并且每隔一段时间更换用户key和iv的生成逻辑

class Aes
{
    /**
     * 加密方法,对数据进行加密,返回加密后的数据
     * @param string $data 要加密的数据
     * @return string
     */
    public function encrypt($data)
    {
        return openssl_encrypt($data, 'AES-256-CBC', '此处填写key',0, '此处填写16位iv');
    }

    /**
     * 解密方法,对数据进行解密,返回解密后的数据
     * @param string $data 要解密的数据
     * @return string
     */
    public function decrypt($data)
    {
        return openssl_decrypt($data,'AES-256-CBC', '此处填写key', 0, '此处填写16位iv');
    }
}

说个题外话,如果在本地化的情景对数据进行加密,因为离线原因key和iv皆需要储存/生成在本地,为了防止破解,你所应该做的是让用户获取key和iv的难度加大,并且对加密逻辑进行混淆打乱打散,虽然最终也不可能阻挡拥有物理权限的用户破解,但能够拖延很多时间并加大用户破解的成本。

php Aes加密算法的使用 AES-256-CBC
Theme Jasmine by Kent Liao