php加密扩展OpenSSL基本应用
发表于:2019-10-11 14:58:59浏览:56次
简介
OpenSSL 库来对称/非对称加解密,以及 PBKDF2、 PKCS7、 PKCS12、 X509 和其他加密操作。
注意 强烈建议你使用最新的OpenSSL版本,否则你的web服务器很容易受到攻击。
安装
在编译 php 时添加参数
--with-openssl在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"

