首页 » Web前端 » phpwithopenssl技巧_php运用openssl加密解密数据

phpwithopenssl技巧_php运用openssl加密解密数据

访客 2024-10-28 0

扫一扫用手机浏览

文章目录 [+]

对称加密常用的算法有: AES 、DES 、3DES、IDEA 、RC5 等,比较常用的是 AES和DES。

openssl非对称加密先容

加密方利用公钥进行加密,解密方利用私钥进行解密,加密方和解密方利用不同的秘钥进行加密和解密称为非对称加密。
非对称加密相对对称加密的速率稍慢,但安全性高。

phpwithopenssl技巧_php运用openssl加密解密数据

非对称加密常用的算法有: RSA、Elgamal、ECC等,RSA非常常用和普遍,SSL和一些证书算法都是基于RSA的算法。

phpwithopenssl技巧_php运用openssl加密解密数据
(图片来自网络侵删)

一样平常公钥给别人利用,私钥自己利用。

openssl加密解密最佳实践方案

对称加密的速率快,非对称加密的安全性高速率慢,我们可以利用非对称加密加密秘钥,利用对称加密加密数据,这样既可以担保速率快,又可以担保安全性高。
如下图所示:

php的openssl扩展

php是通过php的openssl扩展操作系统的openssl软件实现数据的加密和解密。
php的openssl扩展随php软件一起发布的,安装php软件时增加--with-openssl参数就可以安装php的openssl扩展。
查看系统openssl软件版本用如下命令,如果没有安装的话须要先安装openssl软件。

# openssl version

查看系统安装的openssl软件的版本

php openssl对称加密例子

本例子的加密办法利用的是“aes-128-cbc”,加密办法可以通过php openssl的“openssl_get_cipher_methods”函数获取可用的加密办法。
初始化向量iv可以通过“openssl_cipher_iv_length”函数获取向量iv的长度字节,我这里利用的“aes-128-cbc”加密算法通过此函数打算的长度是16字节,以是我这里将iv写去世为“0123456789abcdef”,一个英笔墨符占一个字节,我用16个英笔墨符代表16字节。
为什么我这里要将iv写去世呢,由于在数据加解密中加密的iv向量和解密的iv向量必须一样,才能解密数据,以是我不能每次都去利用“openssl_random_pseudo_bytes”函数天生指定长度的伪随机字节串。
总之加密利用了什么iv,解密时就必须供应加密时相同的iv,才能解密。
如下是一个php 对称加解密的类。

<?php/ 加密器/class Cryptor{/ @var string 秘钥/private static $key = 'xxxxxxxxxx';/ @var string 加密办法/private static $cipherAlgo = 'aes-128-cbc';/ @var string 偏移向量/private static $iv = '0123456789abcdef'; // 向量/ 加密 @param $plainText 明文 @return string @throws Exception/public static function encrypt($plainText){if ($plainText === '') {return '';}$cipherText = openssl_encrypt($plainText, self::$cipherAlgo, self::$key, 0, self::$iv); // 加密数据if ($cipherText === false) {throw new Exception("数据加密失落败");}return $cipherText;}/ 解密 @param $cipherText @return string @throws Exception/public static function decrypt($cipherText){if ($cipherText === '') {return '';}$plainText = '';try{$plainText = openssl_decrypt($cipherText, self::$cipherAlgo, self::$key, 0, self::$iv);if ($plainText === false) {return '';}}catch(Exception $e){}return $plainText;}}

php对称加密数据

php对称加密数据

php对称解密数据

php对称解密数据

php openssl非对称加密例子

非对称加密是分别须要一个公钥和私钥,我们师长西席成一个私钥。
把稳:公钥是给别人的,私钥不能给别人,私钥是自己用来加解密数据的。

在windows系统中天生秘钥,须要在系统上安装一个可用的 openssl.cnf 配置文件。
此配置文件在php安装包的 extras/ssl 文件夹中,将其复制到phpinfo 的openssl扩展的“Openssl default config”指定的路径中即可。
当然也可以配置环境变量来修正这个配置文件的路径,详细配置键php官网描述。
否则,php天生秘钥的函数会返回false,天生失落败。
如下图所示:

openssl.cnf的路径

openssl default config配置路径

环境变量中openssl.cnf的路径

1、天生私钥

<?php$asymmetricKey = openssl_pkey_new(); // 天生一个新的私钥,返回非对称key的实例openssl_pkey_export($asymmetricKey, $privateKey); // 导出私钥echo $privateKey;

php openssl天生私钥

php天生的私钥

天生公钥

公钥是通过私钥天生的,可以通过私钥工具天生不同的公钥,可以为不同的客户端分发不同的公钥。

// 得到公钥$publicKeydetails = openssl_pkey_get_details($asymmetricKey); // 返回包含公钥详情的数组$publicKey = $publicKeydetails['key'];echo $publicKey;

php openssl天生公钥

php 天生的公私钥

php非对称公私钥加密解密数据

<?php$data = '测试非对称加密的数据';// 公钥加密$publicKey = '-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxIOAZ+CQpZRAEiDyiUA9...-----END PUBLIC KEY-----';openssl_public_encrypt($data, $encrypted, $publicKey);echo $encrypted.PHP_EOL;// 私钥解密$privateKey = '-----BEGIN PRIVATE KEY-----MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDEg4Bn4JCllEAS...-----END PRIVATE KEY-----';openssl_private_decrypt($encrypted, $decrypted, $privateKey);echo $decrypted;

php openssl公私钥非对称加解密例子

数据署名和验证

署名和验证是用于判断数据是否是指定对方发送过来的数据。
php可以通过openssl_sign利用私钥署名数据,利用openssl_verify验证署名数据。
如下图所示。

php公私钥署名验证数据

标签:

相关文章

php如何导入csv技巧_PHP导入CSV格式的文件

事情中常用到一些导入数据的功能,本日就给大家先容一种办法,导入csv文件,此办法导入还是比较快的,但是也会存在一些问题。比如csv...

Web前端 2024-12-11 阅读0 评论0