php pki加密技术(openssl)详解

 更新时间:2013年07月01日 10:30:20   作者:  
本篇文章是对php中的pki加密技术(openssl)进行了详细的分析介绍,需要的朋友参考下
复制代码 代码如下:

<?php
//pki加密
//使用pki加密需要开启 openssl扩展
//php.ini extension = php_openssl.dll扩展
/*pki模式是
 * 公钥加密,私钥解密;
 * 私钥加密,公钥解密;
 */
//私钥加密,公钥解密
//客户端
//$data数据
$data = 'abcd';
//获取私钥 $priv_key_id
$priv_key_id = openssl_get_privatekey(file_get_contents('99bill-rsa.pem', r));
//获取公钥  $pub_key_id
$pub_key_id = openssl_get_publickey(file_get_contents('99bill-rsa.cer', r));
//$data首选通过SHA1哈希加密,然后通过$priv_key_id私钥加密,生成签名$signature
//$signature就是加密过的签名
//openssl_sign()加密函数,至于它的解密方法我不知道??????????????????????
openssl_sign($data, $signature, $priv_key_id, OPENSSL_ALGO_SHA1);
//还有两种加密函数,而且这两种加密函数有解密方法,知道
//第一种:私钥加密,公钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$priv_key_id私钥加密,生成$crypted;
openssl_private_encrypt($data, $crypted, $priv_key_id);
echo $crypted;
//通过$pub_key_id公钥解密,生成$decrypted
openssl_public_decrypt($crypted, $decrypted , $pub_key_id);
//第二种:公钥加密,私钥解密
//$data要加密的数据,$crypted是加密生成的数据,$decrypted是解密生成的数据;  $data与$decrypted值相同
//通过$pub_key_id公钥加密,生成$crypted;
openssl_public_encrypt($data, $crypted, $pub_key_id);
//通过$priv_key_id私钥解密,生成$decrypted
openssl_private_decrypt($crypted, $decrypted, $priv_key_id);
//注意事项,我这边的获取公钥与私钥的文件是不对应的
//正常情况,获取公钥与私钥文件是一一对应的,这里我使用快钱的。
//快钱给了私钥生成文件,对应的公钥生成文件在快钱那边
//快钱给了公钥生成文件,对应的私钥生成文件在快钱那边
//也就是缺少了一个公钥生成文件和一个私钥生成文件
//我始终没找到一个一一对应的私钥、公钥生成文件,如果你找的了发我一份,谢谢。
// openssl_verify()方法验证签名是否正确(私钥加密生成的数据返回来,用对应的公钥验证),只有这一种情况。
// $signature公钥加密生成的数据,$data原始数据,成功返回1,失败返回0,错误返回-1
// $pub_key_id公钥
openssl_verify($data, $signature, $pub_key_id);
//从内存中释放私钥或公钥
openssl_free_key($priv_key_id);
openssl_free_key($pub_key_id);

生成私钥与公钥
genrsa -out private-rsa.pem
rsa -in private-rsa.pem -pubout -out pubic-rsa.cer

相关文章

  • PHP PDO函数库详解

    PHP PDO函数库详解

    PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力;与ADODB和MDB2相比,PDO更高效。
    2010-04-04
  • php构造函数的继承方法

    php构造函数的继承方法

    这篇文章主要介绍了php构造函数的继承方法,实例分析并总结了构造函数继承的各种常见情况,需要的朋友可以参考下
    2015-02-02
  • PHP实现加密的几种方式介绍

    PHP实现加密的几种方式介绍

    这篇文章主要介绍了PHP实现加密的几种方式,非常全面实用,都是项目中经常需要用到的,需要的朋友可以参考下
    2015-02-02
  • PHP文件缓存内容保存格式实例分析

    PHP文件缓存内容保存格式实例分析

    这篇文章主要介绍了PHP文件缓存内容保存格式,是PHP程序开发中非常实用的功能,需要的朋友可以参考下
    2014-08-08
  • php基础知识:类与对象(3) 构造函数和析构函数

    php基础知识:类与对象(3) 构造函数和析构函数

    php基础知识:类与对象(3) 构造函数和析构函数...
    2006-12-12
  • 在VSCode中配置PHP开发环境的实战步骤

    在VSCode中配置PHP开发环境的实战步骤

    最近要写一些可视化的网站,所以先把需要的环境配好吧,下面这篇文章主要给大家介绍了关于在VSCode中配置PHP开发环境的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • PHP快速生成各种信息提示框的方法

    PHP快速生成各种信息提示框的方法

    这篇文章主要介绍了PHP快速生成各种信息提示框的方法,实例分析了PHP动态构造html与JS页面元素与调用显示的相关技巧,需要的朋友可以参考下
    2016-02-02
  • PHP 文件扩展名 获取函数

    PHP 文件扩展名 获取函数

    有时候我们需要获取文件的扩展名,分类文件等原因,下面是php的函数实例代码。
    2009-06-06
  • php防止sql注入简单分析

    php防止sql注入简单分析

    这篇文章主要介绍了php防止sql注入的方法,简单分析了通过stripslashes及mysql_real_escape_string函数进行字符转移处理的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  • PHP中其实也可以用方法链

    PHP中其实也可以用方法链

    javascript里有个很有效的用法即方法链,在PHP里也可以使用方法链
    2011-11-11

最新评论