您的当前位置:首页>全部文章>文章详情

php加密扩展OpenSSL基本应用

发表于:2019-10-11 14:58:59浏览:56次TAG: #PHP

简介

OpenSSL 库来对称/非对称加解密,以及 PBKDF2、 PKCS7、 PKCS12、 X509 和其他加密操作。

注意 强烈建议你使用最新的OpenSSL版本,否则你的web服务器很容易受到攻击。

官方文档链接


安装

  1. 在编译 php 时添加参数

    --with-openssl
    
  2. 在php的安装包中安装

    cd php-7.3.5/ext/openssl
    mv config0.m4 config.m4
    sudo /usr/local/php/bin/phpize
    sudo ./configure --with-openssl --with-php-config=/usr/local/php/bin/php-config
    sudo make
    sudo make install
    

将 openssl 添加到 php 配置中

sudo vim /usr/local/php/etc/conf.d/openssl.ini

写入如下内容

[openssl]
extension=openssl.so

代码编写

<?php
/**
 * Openssl 加密/解密类
 *
 */
class Openssl {

    /**
     * 加密
     * @param data 待加密的明文信息数据。
     * @param key
     * @param iv 非 NULL 的初始化向量。
     *
     * @return 被加密的数据
     */ 
    public static function encode($data, $key, $iv){
        $plaintext = $data;
        //md5做效验值
        $md5_key = substr(md5($plaintext),8,16);
        $plaintext = $md5_key . $plaintext;

        $ciphertext = openssl_encrypt($plaintext, "AES-128-CBC", $encodingaeskey, OPENSSL_RAW_DATA, $iv);
        $ciphertext_base64 = base64_encode($ciphertext);
        return $ciphertext_base64; 
    }

    /**
     * 解密
     * @param data 待解密的明文信息数据。
     * @param key
     * @param iv 非 NULL 的初始化向量。
     *
     * @return 被解密的数据
     */ 
    public static function decode($data, $key, $iv){
        $plaintext = openssl_decrypt(base64_decode($data), "AES-128-CBC", $encodingaeskey, OPENSSL_RAW_DATA, $iv);
        $plaintext = rtrim($plaintext, "\0");
        //md5效验
        $md5_key   = substr($plaintext,0,16);
        $plaintext = substr($plaintext,16);
        $com_key = substr(md5($plaintext),8,16);
        if($md5_key === $com_key){
            return $plaintext;
        }
        return false;
    }
}

使用


// 加密对象
$password = 'helloworld123';

$openssl_key = 'moJRcGpOonpbTgqG';
$openssl_iv = '0vRDaiLy0LGCJUWO';

// 加密
$data = Openssl::encode($password, $openssl_key, $openssl_iv);
var_dump($data);
# 输出 string(44) "HoGaamMWuQ+clkqY2go6wF+3KxeakbjpFJfmhxbtNWA="

// 解密
$data = Openssl::decode($data, $openssl_key, $openssl_iv);
var_dump($data);
# 输出 string(13) "helloworld123"
栏目分类全部>
腾讯云采购季云服务器一折促销