对称加密常用的算法有: AES 、DES 、3DES、IDEA 、RC5 等,比较常用的是 AES和DES。
openssl非对称加密先容加密方利用公钥进行加密,解密方利用私钥进行解密,加密方和解密方利用不同的秘钥进行加密和解密称为非对称加密。非对称加密相对对称加密的速率稍慢,但安全性高。
非对称加密常用的算法有: RSA、Elgamal、ECC等,RSA非常常用和普遍,SSL和一些证书算法都是基于RSA的算法。

一样平常公钥给别人利用,私钥自己利用。
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公私钥署名验证数据