iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP怎么使用OpenSSL加密中的非对称加密
  • 871
分享到

PHP怎么使用OpenSSL加密中的非对称加密

2023-06-15 08:06:59 871人浏览 独家记忆
摘要

这篇文章主要介绍了PHP怎么使用OpenSSL加密中的非对称加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php的OpenSSL加密扩展学习:非对称加密生成私钥通过之前的

这篇文章主要介绍了PHP怎么使用OpenSSL加密中的非对称加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

php的OpenSSL加密扩展学习:非对称加密

生成私钥

通过之前的学习,我们知道非对称加密是分别需要一个公钥和一个私钥的。我们就先来生成一个私钥,也就是存放在我们这一端一个密钥。请记住,在任何时候,私钥都是不能给别人的哦!

$config = array(    "private_key_bits" => 4096, // 指定应该使用多少位来生成私钥);$res = openssl_pkey_new($config); // 根据配置信息生成私钥openssl_pkey_export($res, $privateKey); // 将一个密钥的可输出表示转换为字符串var_dump($privateKey); // -----BEGIN PRIVATE KEY-----// MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDFMLW+9t3fNX4C// YBuV0ILSyPAdSYVXtE4CLv32OvNk9yQZgF2nL/ZuIbBGRcYo2Hf5B31doGrAFDGu// NoTR+WA7CBjKROFr/+yValsMFIeiKNtttWMkmBciysDJoEoyd6wjDD+kcHQdoJVo// ……// -----END PRIVATE KEY-----

非常简单的一个函数 openssl_pkey_new() ,它接收一个参数,这个参数是可配置项并且是可选参数。生成的结果是一个私钥句柄,不是我们能直接读取的内容,所以我们再使用 openssl_pkey_export() 来提取可输出的字符串。

注释中的内容就是我们生成的私钥信息了,私钥信息一般会相对多些,所以省略了后面的内容。

抽取公钥

接下来就是生成公钥了,其实,公钥是从私钥中抽取出来的。所以我们使用进行加解密的时候,都可以使用私钥或者公钥互相操作。

$publicKey = openssl_pkey_get_details($res); // 抽取公钥信息var_dump($publicKey);// array(4) {//     ["bits"]=>//     int(4096)//     ["key"]=>//     string(800) "-----BEGIN PUBLIC KEY-----//   MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtOIImDdS0W0vAr5Ra1+E//   hR2AJwQQwxntYKgTku8EmJRBX2vU+x8th8W8SnoGiVM/sOItG0HIe4Egf1UxoZHt//   gI6r+jpAp7JbTN0sD/VTPDE09F21+hFGjIVBqrkcLPjuEbf7+tjmgAx8cG8WLGId//   G8Hsub70kRANKJe1bCXIBUggRFk0sQGllxA/hxiG5wANqHTrdpJgJba+ahSi2+4H//   UWnyCV1O3AaPyz6a12HNUsG4Eio/tWv/hOB9POt6nAqwPHuIbhp56i5bv1ijMJZM//   jwRen5f/kwdZ01Ig2fi0uBoTR2y/EEaus7xBYpF/gGzZ/uM7cNUXcDyG5YluM/4R//   MEv4msPMVGB72izItED+C6Cqftxl98iBFRDc+PISFbRSGoU/HsuBhKkM5SYzyi3I//   Ypaej25++qLPqcA+EDr3JNDhNZ0GOhofCRtPq4dsr7iLLLRnZ0TnhIYe9wAbmO49//   uthABNBkM54bG+omOfY4Bkn5n39CKpELbhIiXgOd+lA684XUS/2Aw3Dvelc9Gbag//   oIFvb/wljPYsd0Zmd64CXBpTWbfwXC8K4vCKvFLjytcz2Yp4T6fVjbLT5RA6u8su//   E0WwE4QtFNKhnM5OvfiMN+NMc3Y/esVfcin3eyvotdz4N6Tt45dkybkf6aQE3Scg//   E/JBLIEEA+gjGTveY4cNUiECAwEAAQ==//   -----END PUBLIC KEY-----//   "//     ["rsa"]=>// ……$publicKey = $publicKey['key'];

使用 openssl_pkey_get_details() 抽取出来的内容包含很多内容。不过我们所需要的最主要的内容就是 key 下面的这个公钥。

大家再回过头来好好看一下公钥和私钥的内容,是不是和我们去申请的 https 证书中的公私钥内容长得一样,而且也和我们自己在系统中使用 openssl 命令行生成的本机的密钥证书一样。它们本身就是一样的东西啦,只是在不同的场景应用的不同而已。HttpS 证书除了非对称加密的密钥之外,还包含有 CA 信息,如果 CA 不通过,浏览器也会认为证书是无效的,因此,我们使用自己生成的证书来充当 HTTPS 证书是不可以的。而本身生成的一般会用在 ssh 免密登录上,或者是 GitHub 的免密代码仓库操作上。

加密解密数据

好了,公钥和私钥都生成完成了,那么我们就要进行最重要的加密和解密操作了。

$data = '测试非对称加密';// 公钥加密数据openssl_public_encrypt($data, $encrypted, $publicKey);var_dump($encrypted);// string(512) // 私钥解密数据openssl_private_decrypt($encrypted, $decrypted, $privateKey);var_dump($decrypted);// string(21) "测试非对称加密"

在这里,我们使用的就是最标准的公钥加密,私钥解密来进行的测试。其实反过来也是可以的,OpenSSL 分别都为我们提供了公钥的加解密和私钥的加解密函数。

就像上篇文章的图示那样,对方获得我们的公钥,然后加密数据传输过来,我们通过自己的私钥解密数据获得原文。而我方也可以获得对方的公钥,并将返回的数据加密后传输给对方,然后对方使用自己的私钥进行解密获得我们传递给它的原文数据。

而 HTTPS 是通过 CA 颁发的证书来获取公钥的,浏览器通过公钥加密请求数据传输给服务器服务器也是通过相同的原理来向浏览器客户端发送密文数据。因此,在数据传输过程中,使用 HTTPS 的传输会更加地安全,即使被截获了,对方也没有证书提供的密钥来进行解密。这就是现在所有 App 和 小程序 应用都要求使用 HTTPS 的原因,当然,我们如果做网站开发也最好使用 HTTPS ,就连百度对 HTTPS 的收录也有相应的调整。

签名及验证

接下来我们再接触一个签名的概念。当两端进行通信时,我们怎么知道当前传输过来的数据一定是对端发送过来的的呢,中间有没有黑客进行了篡改呢?这个就可以通过签名机制来进行验证。

// 利用私钥生成签名openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);var_dump($signature);// 公钥验证签名$r = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);var_dump($r);// int(1)

我们通过 openssl_sign() 来生成一个对原始数据的私钥签名,然后就可以使用 openssl_verify() 通过公钥验证数据签名是否一致。

在使用的时候,发送方通过自己的私钥生成签名,由于签名内容是乱码的,我们可以将它 base64_encode() 一下,然后连同加密数据一起传递给接收方。然后接收方使用公钥并根据签名内容来验证原文数据是否被篡改过。

// 发送方签名$resquestSign = base64_encode($signature);// 假设通过网络请求发送了数据// ……// 接收到获得签名及原始数据// $signature = $_POST['sign'];// openssl_private_decrypt($_POST['data'], $data, $privateKey); $responseSign = base64_decode($signature);// 验证数据有没有被篡改$r = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);var_dump($r);// int(1)// 假设被篡改$data = '我被修改了';$r = openssl_verify($data, $signature, $publicKey, OPENSSL_ALGO_SHA256);var_dump($r);// int(0)

感谢你能够认真阅读完这篇文章,希望小编分享的“PHP怎么使用OpenSSL加密中的非对称加密”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网PHP编程频道,更多相关知识等着你来学习!

--结束END--

本文标题: PHP怎么使用OpenSSL加密中的非对称加密

本文链接: https://www.lsjlt.com/news/278966.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP怎么使用OpenSSL加密中的非对称加密
    这篇文章主要介绍了PHP怎么使用OpenSSL加密中的非对称加密,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP的OpenSSL加密扩展学习:非对称加密生成私钥通过之前的...
    99+
    2023-06-15
  • https使用对称加密还是非对称加密
    这篇文章主要介绍了https使用对称加密还是非对称加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇https使用对称加密还是非对称加密文章都会有所收获,下面我们一起来看看吧。HTTPS协议是由SSL/TLS+...
    99+
    2023-06-27
  • 怎么在PHP中使用RSA非对称加密算法
    本篇文章给大家分享的是有关怎么在PHP中使用RSA非对称加密算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言...
    99+
    2023-06-14
  • java对称加密和非对称加密有什么区别
    对称加密和非对称加密是两种常见的加密算法,它们在加密和解密的过程中有以下区别:1. 密钥的数量:对称加密使用同一个密钥来进行加密和解...
    99+
    2023-09-05
    java
  • PHP中如何进行对称和非对称加密?
    在网络安全领域,加密技术是一种非常重要的技术手段,其可以将数据进行加密和解密,从而确保数据的安全性。PHP作为一种流行的服务器端编程语言,也提供了对称和非对称加密的支持,以满足不同应用场景的需求。对称加密对称加密是指使用相同的密钥进行加密与...
    99+
    2023-05-21
    加密算法 对称加密 非对称加密
  • SQLServer2008中的非对称密钥加密有什么用
    本篇内容主要讲解“SQLServer2008中的非对称密钥加密有什么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQLServer2008中的非对称密钥加密...
    99+
    2024-04-02
  • java和PHP 的非对称加密RSA/ECB/PKCS1Padding和对称加密DESede/ECB/PKCS5Padding;
    非对称加解密PHP public function EnRsa($str,$public_key){ //公钥加密 $public_key = chunk_split($public_ke...
    99+
    2023-09-28
    php java 开发语言
  • Thinkphp 6 使用RSA非对称加密算法 对接口加密解密
    后台接口中 经常使用到加密算法 如何使用RSA 非对称加密 对数据进行加密传输 下载RSA 加密算法 php-Rsa算法下载 将下载好的RSA 算法 放入 到 TP6项目根目录下 exten...
    99+
    2023-09-17
    php 算法
  • Node.js中怎么实现非对称加密
    Node.js中怎么实现非对称加密,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。加密、解密方法在Node.js中,负责安全的模块是cryp...
    99+
    2024-04-02
  • 详解PHP使用非对称加密算法RSA
    目录加密的类型非对称加密算法具体实现1、加密解密的第一步2、PHP的加密解密类库调用demo加密的类型 在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明...
    99+
    2024-04-02
  • php对称加密AES加密解密
    AES-128-ECB和AES-256-CBC是两种常见的AES加密模式,它们在加密方式和安全性上有以下区别: 加密方式: AES-128-ECB:ECB(Electronic Codebook)模式是最简单的AES加密模式,它将数据...
    99+
    2023-09-01
    php 开发语言 同态加密 hash-index 哈希算法
  • 如何实现Linux下OpenSSL的DSA与RSA非对称加密
    这篇文章主要讲解了“如何实现Linux下OpenSSL的DSA与RSA非对称加密”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现Linux下OpenSSL的DSA与RSA非对称加密”吧...
    99+
    2023-06-12
  • Vue中怎么使用jsencrypt进行RSA非对称加密
    本篇内容介绍了“Vue中怎么使用jsencrypt进行RSA非对称加密”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!下载jsencryptc...
    99+
    2023-06-29
  • PHP中怎么使用OpenSSL加密中的证书
    小编给大家分享一下PHP中怎么使用OpenSSL加密中的证书,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!PHP的OpenSSL加密扩展学习(三):证书操作关于对称和非对称的加密操作,我们已经学习完两篇文章的内容了,接下来...
    99+
    2023-06-15
  • python----RSA非对称加密算法
    最近在搞项目的接口持续性自动化测试,好久没有更新博客了。 项目中接触到很多加密相关的数据,很多项目都会用到非对称加密算法来保证前端和服务器交互的数据安全。 下面介绍下python下怎么使用RSA加密算法: import rsa (pub...
    99+
    2023-01-31
    加密算法 非对称 python
  • 如何在PHP中使用OpenSSL加密
    本篇文章为大家展示了如何在PHP中使用OpenSSL加密,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。PHP的OpenSSL加密扩展学习(一):对称加密我们已经学过不少 PHP 中加密扩展相关的内容...
    99+
    2023-06-15
  • 浅析Java中对称与非对称加密算法原理与使用
    目录1. 加密概念2. 对称加密3. 非对称加密4. 常见加密算法比较4.1. 散列算法比较4.2. 对称加密算法比较4.3. 非对称加密算法比较5. 常见加密算法使用5.1. MD...
    99+
    2023-03-21
    Java对称加密 Java非对称加密 Java加密
  • PHP中AES对称加密实践
    在PHP中,可以使用 OpenSSL 扩展来进行 AES 对称加密。下面是一个示例代码来演示如何使用 PHP 进行 AES 加密和解密: 在上述代码中,我们使用 AES-256-CBC 加密算法和一个密钥进行加密和解密。首先,我们随机生成...
    99+
    2023-09-07
    php
  • java 中的非对称加密怎么利用DH方式实现
    本篇文章为大家展示了java 中的非对称加密怎么利用DH方式实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实现代码:package com.sahadev;  im...
    99+
    2023-05-31
    java dh 非对称加密
  • Vue中使用crypto-jsAES对称加密算法实现加密解密
    目录 下载crypto-js加密解密数据AES算法的ECB模式加密-设置秘钥AES算法的CBC模式加密-设置秘钥和偏移量参考: 在数字加密算法中,通过可划分为对称...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作