PHP实现3DES加解密

CBC模式一定要指定IV加密向量
ECB模式不需要指定IV加密向量

class TripleDes {
    /**
     * @var string
     */
    var $key = '';

    /**
     * @var string
     */
    var $iv = '';

    /**
     * Des3 constructor.
     * @param string|null $key
     * @param string|null $iv
     */
    public function __construct(string $key=null, string $iv=null)
    {
        if (!$key && strlen($key) != 24) {
            throw new \Exception("3DES_KEY长度错误,长度为24");
        }
        if (!$iv && strlen($iv) != 8) {
            throw new \Exception("3DES_IV长度错误,长度为8");
        }
        $this->key = $key;
        $this->iv = $iv;
    }

    public function encrypt($input, $key='', $iv='') {
        $this->key = $key ? $key : $this->key;
        $this->iv = $iv ? $iv : $this->iv;
        //return base64_encode(openssl_encrypt($input, "des-ede3-cbc", $this->key, OPENSSL_RAW_DATA, $this->iv));
        return base64_encode(openssl_encrypt($input, "des-ede3", $this->key, OPENSSL_RAW_DATA));
    }

    public function decrypt($encrypted, $key='', $iv='') {
        $this->key = $key ? $key : $this->key;
        $this->iv = $iv ? $iv : $this->iv;
        //return openssl_decrypt(base64_decode($encrypted), 'des-ede3-cbc', $this->key, OPENSSL_RAW_DATA, $this->iv);
        return openssl_decrypt(base64_decode($encrypted), 'des-ede3', $this->key, OPENSSL_RAW_DATA);
    }
}

注意:(1)3DES密钥的长度必须是8的倍数,可取24位或32位;(2)加密结果的byte数组转换为字符串,一般采用两种方式:Base64处理或十六进制处理。

上一篇 PHP RSA参数签名与验签
下一篇 PHP生成带文字圆角图片
目录
文章列表
1 微信公众平台消息排重,5s超时处理
微信公众平台消息排重,5s超时处理
2
NodeJS crypto加密
NodeJS crypto加密
3
Swift UI - 分段选择控件(UISegmentedControl)
Swift UI - 分段选择控件(UISegmentedControl)
4
Bigcommerce订单确认页接口调试
Bigcommerce订单确认页接口调试
5
Python搭建HTTP服务器:PyCharm配置virtualenv使用Flask
Python搭建HTTP服务器:PyCharm配置virtualenv使用Flask
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。