当前访客身份:游客 [ 登录 | 加入开源中国 ]

代码分享

当前位置:
代码分享 » PHP  » 编程基础
分享到: 
收藏 +0
2
PHP下SSL加密解密、验证、签名方法。

超级简单。依赖于OpenSSL扩展
标签: PHP OpenSSL

代码片段(3) [全屏查看所有代码]

1. [代码]签名 sign     跳至 [1] [2] [3] [全屏预览]

function sign($data) {
    //读取私钥文件
    $priKey = file_get_contents('key/rsa_private_key.pem');

    //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
    $res = openssl_get_privatekey($priKey);

    //调用openssl内置签名方法,生成签名$sign
    openssl_sign($data, $sign, $res);

    //释放资源
    openssl_free_key($res);

    return $sign;
}

2. [代码]验证 verify     跳至 [1] [2] [3] [全屏预览]

function verify($data, $sign)  {
    //读取支付宝公钥文件
    $pubKey = file_get_contents('key/alipay_public_key.pem');

    //转换为openssl格式密钥
    $res = openssl_get_publickey($pubKey);

    //调用openssl内置方法验签,返回bool值
    $result = (bool)openssl_verify($data, $sign, $res);
	
    //释放资源
    openssl_free_key($res);

    return $result;
}

3. [代码]解密     跳至 [1] [2] [3] [全屏预览]

function decrypt($content) {

    //读取商户私钥
    $priKey = file_get_contents('key/rsa_private_key.pem');
    
    //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
    $res = openssl_get_privatekey($priKey);

    //声明明文字符串变量
    $result  = '';

    //循环按照128位解密
    for($i = 0; $i < strlen($content)/128; $i++  ) {
        $data = substr($content, $i * 128, 128);
		
	//拆分开长度为128的字符串片段通过私钥进行解密,返回$decrypt解析后的明文
        openssl_private_decrypt($data, $decrypt, $res);

	//明文片段拼接
        $result .= $decrypt;
    }

    //释放资源
    openssl_free_key($res);

    //返回明文
    return $result;
}


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(8)

  • 1楼:Jiazz 发表于 2013-02-23 23:41 回复此评论
    Warning : openssl_pkey_export() [ function.openssl-pkey-export ]: cannot get key from parameter 1 in  D:\Website\OpenSSL\beta.php  on line  3

    Warning : openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in  D:\Website\OpenSSL\beta.php  on line  4



    我配置的环境有问题还是??HTTPS虚拟主机可以正常访问
  • 2楼:cevin 发表于 2013-02-24 01:26 回复此评论

    引用来自“ljz”的评论

    Warning : openssl_pkey_export() [ function.openssl-pkey-export ]: cannot get key from parameter 1 in  D:\Website\OpenSSL\beta.php  on line  3

    Warning : openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in  D:\Website\OpenSSL\beta.php  on line  4



    我配置的环境有问题还是??HTTPS虚拟主机可以正常访问
    那啥。这个需要一个合法的SSL证书文件。
  • 3楼:非师范 发表于 2013-02-24 09:35 回复此评论
    这是支付宝无线接口那边的文档吧。。。
  • 4楼:Jiazz 发表于 2013-02-24 09:40 回复此评论

    引用来自“cevin”的评论

    引用来自“ljz”的评论

    Warning : openssl_pkey_export() [ function.openssl-pkey-export ]: cannot get key from parameter 1 in  D:\Website\OpenSSL\beta.php  on line  3

    Warning : openssl_pkey_get_details() expects parameter 1 to be resource, boolean given in  D:\Website\OpenSSL\beta.php  on line  4



    我配置的环境有问题还是??HTTPS虚拟主机可以正常访问
    那啥。这个需要一个合法的SSL证书文件。
    这个~~~OPENSSL生成的算合法的吗??
  • 5楼:一堵墙 发表于 2014-12-14 19:35 回复此评论
    就不全
  • 6楼:一堵墙 发表于 2014-12-14 19:36 回复此评论
    公钥私钥加密解密都没写
  • 7楼:一堵墙 发表于 2014-12-14 19:36 回复此评论
    解密根本不用循环啊
  • 8楼:一堵墙 发表于 2014-12-14 23:03 回复此评论
    签名也是有问题的
开源从代码分享开始 分享代码