美文网首页
PHP使用非对称加密算法(RSA)

PHP使用非对称加密算法(RSA)

作者: Strong_晨 | 来源:发表于2018-01-10 18:41 被阅读0次
  • 说明

本来以为非对称加密算法很简单。几句代码就搞定了。结果搞了我差不多一个下午的时间,网上的很多文章没遇到的问题被我遇到了。在网上找了半天还没找到解决的办法。查来查去。终于是搞定了。
主要还是创建秘钥的时候。那个OpenSSL的cnf那个文件。
还需要打开php的php_openssl扩展。
php.ini 搜索php_openssl 把前面的分号去掉
extension=php_openssl.dll


  • 代码

<?php

/**
 * 为了方便操作非对称加密的算法。
 * Class Rsa
 * @author chen <935938143@qq.com>
 */
class Rsa{
    /**
     * @var array 创建秘钥时需要的配置
     * 格式如下:
     * array(
     *      'config'        => 'D:\phpStudy\Apache\conf\openssl.cnf',    //openssl.cnf的路径。有些电脑不用配置。90%是用配置的
     *      "digest_alg"    => "sha512",
     *      "private_key_bits" => 4096,
     *      "private_key_type" => OPENSSL_KEYTYPE_RSA,
     *
     * );
     *
     */
    private $config = array();

    public function __construct($config=array()){
        $this->config = $config;
    }

    /**
     * 新建一个秘钥对
     * @param string $key 生成秘钥的密码.
     * @return array array('private_key'=>'','public_key'=>'')
     */
    public function create_keypair($key = null){
        // 创建新的密钥对
        $res=openssl_pkey_new($this->config);
        // 获取私钥
        openssl_pkey_export($res, $privkey,$key,$this->config);

        // 解析这个秘钥资源
        $pubkey = openssl_pkey_get_details($res);
        // 得到公钥
        $pubkey = $pubkey["key"];

        // 得到之后。最好是用base64_encode编译一下。
        return array('private_key'=>$privkey,'public_key'=>$pubkey);
    }


    /**
     * 使用私钥将数据加密
     * @param $data string 一个字符串类型的数据
     * @param $private_key string 私钥
     * @param $key string 创建秘钥时你设置的密码
     * @return string 返回加密后的数据
     */
    public function private_encrypt($data,$private_key,$key=null){
        $bool = openssl_private_encrypt($data,$crypted_data,openssl_pkey_get_private($private_key,$key));
        return $bool ? $crypted_data : $bool;
    }

    /**
     * 使用公钥解密
     * @param $data string 用私钥加密后的数据
     * @param $public_key string 公钥
     * @return string 返回解析出来的数据
     */
    public function public_decrypt($data,$public_key){
        $bool = openssl_public_decrypt($data,$decrypted_data,$public_key);
        return $bool ? $decrypted_data : $bool;
    }

    /**
     * 使用公钥将数据加密
     * @param $data string 需要加密的数据
     * @param $public_key string 公钥
     * @return string 加密后的数据
     */
    public function public_encrypt($data,$public_key){
        $bool = openssl_public_encrypt($data,$enctypted_data,$public_key);
        return $bool ? $enctypted_data : $bool;
    }

    /**
     * 使用私钥加密
     * @param $data string 公钥加密数据
     * @param $private_key string 私钥
     * @param null $key 创建秘钥时你设置的密码
     * @return string 返回解密后的数据
     */
    public function private_decrypt($data,$private_key,$key=null){
        $bool = openssl_private_decrypt($data,$decrypted_data,openssl_pkey_get_private($private_key,$key));
        return $bool ? $decrypted_data : $bool;
    }
}

//下面是例子
$config = array(
    'config'        => 'D:\phpStudy\Apache\conf\openssl.cnf',    //openssl.cnf的路径。有些电脑不用配置。90%是用配置的
);

$rsa = new Rsa($config);
$test = $rsa->create_keypair('test');
$private_str =  $rsa->private_encrypt('hello',$test['private_key'],'123');
echo $rsa->public_decrypt($private_str,$test['public_key']);
echo "\n";
$public_str = $rsa->public_encrypt('456',$test['public_key']);
echo $rsa->private_decrypt($public_str,$test['private_key'],'123');




如果哪里有写的不好的地方。请多指教

相关文章

  • 非对称加密算法RSA 学习

    非对称加密算法RSA 学习 RSA加密算法是一种非对称加密算法。RSA是1977年由罗纳德·李维斯特(Ron Ri...

  • Android 拿到私钥字符串对目标字符串进行加密

    关于加密算法 分为对称和非对称加密算法,其中RSA是常用非对称加密算法。对称加密中AES高级加密标准使用Rijnd...

  • RSA加密算法详解

    什么是RSA算法? RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是197...

  • 6.1 密码学专题 - 非对称加密算法 - RSA 算法

    密码学专题 - 非对称加密算法 - RSA 算法 6.1 RSA 算法 第一个较完善的非对称加密算法 RSA,它既...

  • RSA从原理到ctf解题(原理篇)

    简介: RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德...

  • 局1_RSA算法和SM2算法

    RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯...

  • RSA 密钥的生成

    简介 RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·...

  • 3.2 RSA算法简介

    非对称加密技术 -- RSA算法 RSA算法是流行最广泛的非对称加密算法,也是唯一的基于因式分解的非对称加密算法。...

  • 非对称加密-数字签名

    背景 现有的非对称加密算法有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法) 使用...

  • RSA非对称加解密原理及示例代码

    RSA非对称加解密可以实现安全传输,本文简单介绍一下其原理和实现代码 RSA加密算法 RSA加密算法是一种非对称加...

网友评论

      本文标题:PHP使用非对称加密算法(RSA)

      本文链接:https://www.haomeiwen.com/subject/hqxanxtx.html