PHP基于openssl实现非对称加密代码实例

使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密。

1.安装openssl和php的openssl扩展

2.生成私钥:openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护

openssl genrsa -out rsa_private_key.pem 1024

3.生成公钥:rsa命令用于处理RSA密钥、格式转换和打印信息

openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

4.这里我们使用私钥加密,公钥解密

<?php
/**
 * 密钥文件的路径
 */
$privateKeyFilePath = 'rsa_private_key.pem';
/**
 * 公钥文件的路径
 */
$publicKeyFilePath = 'rsa_public_key.pem';
extension_loaded('openssl') or die('php需要openssl扩展支持');
(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('密钥或者公钥的文件路径不正确');
/**
 * 生成Resource类型的密钥,如果密钥文件内容被破坏,openssl_pkey_get_private函数返回false
 */
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
/**
 * 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false
 */
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
($privateKey && $publicKey) or die('密钥或者公钥不可用');
/**
 * 原数据
 */
$originalData = '加密前hahahaha';
/**
 * 加密以后的数据,用于在网路上传输
 */
$encryptData = '';
echo '原数据为:', $originalData, PHP_EOL;
///////////////////////////////用私钥加密////////////////////////
if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
  /**
   * 加密后 可以base64_encode后方便在网址中传输 或者打印 否则打印为乱码
   */
  echo '加密成功,加密后数据(base64_encode后)为:', base64_encode($encryptData), PHP_EOL;
} else {
  die('加密失败');
}
///////////////////////////////用公钥解密////////////////////////

/**
 * 解密以后的数据
 */
$decryptData = '';
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
  echo '解密成功,解密后数据为:', $decryptData, PHP_EOL;
} else {
  die('解密成功');
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2020-06-18

php基于openssl的rsa加密解密示例

本文实例讲述了php基于openssl的rsa加密解密.分享给大家供大家参考,具体如下: <?php $config = array( //"config" =>"D:/phpserver/Lighttpd/openssl.cnf", //'config' =>'D:/phpStudy/Lighttpd/OpenSSL.cnf', 'private_key_bits' => 1024, // Size of Key. 'private_key

PHP中使用OpenSSL生成证书及加密解密

依赖于OpenSSL扩展 /*加密解密*/ function authcode($string, $operation = 'E') { $ssl_public = file_get_contents(DATA_PATH."/conf/cert_public.key"); $ssl_private = file_get_contents(DATA_PATH."/conf/cert_private.pem"); $pi_key = openssl_pkey_get_p

PHP基于openssl实现的非对称加密操作示例

本文实例讲述了PHP基于openssl实现的非对称加密操作.分享给大家供大家参考,具体如下: 使用非对称加密主要是借助openssl的公钥和私钥,用公钥加密私钥解密,或者私钥加密公钥解密. 1.安装openssl和php的openssl扩展 2.生成私钥:openssl genrsa 用于生成rsa私钥文件,生成是可以指定私钥长度和密码保护 openssl genrsa -out rsa_private_key.pem 1024 3.生成公钥:rsa命令用于处理RSA密钥.格式转换和打印信息 o

php实现基于openssl的加密解密方法

本文实例讲述了php实现基于openssl的加密解密方法.分享给大家供大家参考,具体如下: 通过openssl加密解密方法 1. openssl加密方法: function encrypt($id){ $id=serialize($id); $key="1112121212121212121212"; $data['iv']=base64_encode(substr('fdakinel;injajdji',0,16)); $data['value']=openssl_encrypt($

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.p

Js通过AES加密后PHP用Openssl解密的方法

前言 最近遇到的几个网站在提交密码时提交的已经是密文,也就是说在网络上传输的密码是密文,这样提升了密码在网络传输中的安全性. 后端语言加解密已经有很成熟的方案了,前端的话Google之前出过一个crypto-js,为浏览器的js提供了加解密方案.今天一起来了解一下基于AES的前后端加解密流程. Javascript 1.安装npm包 npm install crypto-js 2.加密代码 const CryptoJS = require("crypto-js"); const key

PHP的openssl加密扩展使用小结(推荐)

引言 互联网的发展史上,安全性一直是开发者们相当重视的一个主题,为了实现数据传输安全,我们需要保证:数据来源(非伪造请求).数据完整性(没有被人修改过).数据私密性(密文,无法直接读取)等.虽然现在已经有SSL/TLS协议实现的HTTPS协议,但是因在客户端上依赖浏览器的正确实现,而且效率又很低,所以一般的敏感数据(如交易支付信息等)还是需要我们使用加密方法来手动加密. 虽然对于一般的WEB开发人员来说,大可不必深入了解一些安全相关的底层技术,但学习加密基础知识,使用现有加密相关工具却十分必要.

PHP 使用openssl 扩展实现公钥加密的方法

如下所示: // 生成私钥 # openssl genrsa -out rsa_private_key.pem 1024 // 生成公钥 # openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 下面是示例代码: <?php // openssl 扩展检测 var_dump(extension_loaded('openssl')); $prikey = openssl_pkey_get_private(file_g

PHP使用openssl扩展实现加解密方法示例

从PHP7版本开始很多依赖mcrypt扩展的方法都不支持了,PHP7.2.0及以上版本已经完全不支持mcrypt扩展的任何方法了,所以PHP7及以上版本都应该使用openssl扩展来实现加解密. 以DES-CBC加密方式为例: <?php class DesUtil { /** * Des 加密 * * @param $str * @param $secretKey * @param string $iv * @return string */ public static function en

php7安装openssl扩展方法

1.我的源码在 /home/topsec/Documents/php-7.0.11 ,安装位置在 /usr/local/php7, php.ini 在/ usr/local/php7/lib 下.如果没有php.ini需要把源码中的配置文件 php.ini-development 或php.ini-production改名成php.ini并放在lib下. 2.进入openssl的扩展目录 :/home/topsec/Documents/php-7.0.11/ext/openssl 3.运行php

php无需编译安装openssl扩展的实现方法

在php中使用RSA算法的时候,需要调用openssl_get_publickey方法,但同时需要对php编译openssl扩展,否则会提示以下错误: Call to undefined function openssl_get_publickey() 由于php已经安装完毕,如何无需编译的情况下安装openss呢.这种方式操作步骤如下: 进入php源代码路径 cd /php-5.6.19/ext/openssl 使用phpize编译 cp config0.m4 config.m4 phpize

linux环境下安装PHP的OpenSSL扩展的方法讲解

先安装依赖包:yum install openssl openssl-devel 进入PHP安装包里的OpenSSL文件夹,根据个人的安装包位置不同,此处是 cd /home/local/php.5.6.25/ext/openssl/ phpize 可能会报错:Cannot find config.m4. Make sure that you run /usr/local/bin/phpize in the top level source directory of the module, 在当

VMware下ubuntu扩展磁盘空间的方法

近日由于虚拟机下安装软件过多,时不时弹出磁盘空间不足的问题.查找了很多资料,都没有很好的解决办法. 朋友发来一个链接,还是老外有良心.翻译出来放在这里,根据我的实际需求进行了操作,达到了预期目的. 以防万一,在操作之前将虚拟机进行了备份. 由于安装时没有自己进行分区,磁盘大小也使用了默认的20G.后来发现果然悲剧. 使用df -h命令查看具体使用情况 @ubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 19G

Python实现扩展内置类型的方法分析

本文实例讲述了Python实现扩展内置类型的方法.分享给大家供大家参考,具体如下: 简介 除了实现新的类型的对象方式外,有时我们也可以通过扩展Python内置类型,从而支持其它类型的数据结构,比如为列表增加队列的插入和删除的方法.本文针对此问题,结合实现集合功能的实例,介绍了扩展Python内置类型的两种方法:通过嵌入内置类型来扩展类型和通过子类方式扩展类型. 通过嵌入内置类型扩展 下面例子通过将list对象作为嵌入类型,实现集合对象,并增加了一下运算符重载.这个类知识包装了Python的列表,

CI框架扩展系统核心类的方法分析

本文实例讲述了CI框架扩展系统核心类的方法.分享给大家供大家参考,具体如下: 首先你系统扩展类是放在application/core下面的,本来系统核心类是CI_Controller,所以你不能以CI_开头了,你需要打开 application/config/config.php 修改: $config['subclass_prefix'] = 'MY_'; 为你的前缀! 一些公共的模块就可以卸载自己的核心类里面了! 这几天读了Dilicms(轻量级的后台架构),比如说他的后台扩展类是这样的:

php结合mysql与mysqli扩展处理事务的方法

本文实例讲述了php结合mysql与mysqli扩展处理事务的方法.分享给大家供大家参考,具体如下: 以下只是展示如何应用,具体用的时候要加上判断,如果都执行成功则提交,否则回滚 看前先分清mysqli与mysql扩展是不一样的 mysqli扩展处理事物: $mysqli=new mysqli('localhost','root','123456','test'); $mysqli->autocommit(false);//开始事物 $query="update a set money=m

javascript输出AscII码扩展集中的字符方法

如下所示: function test(){ var c=""; for(var i=1;i<65536;i++){ if((i%10)==0){ c+=i+':\t'+String.fromCharCode(i)+'\t'+'\n';}else{ c+=i+':\t'+String.fromCharCode(i)+'\t';} } document.write(c); } 以上就是小编为大家带来的javascript输出AscII码扩展集中的字符方法全部内容了,希望大家多多支持