php RSA公钥私钥加解密和验证用法

现在很多项目中会使用到rsa加解密和验证相关的技术,分别整理代码如下,方便记忆和使用。

【签名和验证】

 1 //获得签名
 2 function getSign($data) {
 3     $pem =  ‘my_rsa_private_key.pem‘;
 4     $privateKey = openssl_get_privatekey(file_get_contents($pem));
 5     openssl_sign($data, $sign, $privateKey);
 6     openssl_free_key($privateKey);
 7     return base64_encode($sign);
 8 }
 9 //验证签名
10 function checkSign($data, $sign) {
11     $pem =  ‘my_rsa_public_key.pem‘;
12     $publicKey = openssl_get_publickey(file_get_contents($pem));
13     $result = openssl_verify($data, $sign, $publicKey);
14     openssl_free_key($publicKey);
15     return $result;
16 }
17 $signData = ‘php-rsa‘;
18 $getSign = getSign($data);
19 $checkSign = checkSign($data, base64_decode($sign));20 echo ‘签名数据:‘.$signData;
21 echo ‘获得签名:‘.$getSign;
22 echo ‘验证签名:‘.$checkSign;

运行结果如下:签名数据:php-rsa签名结果:LOVAjWTgHeUvJIK0scVOQO2VlId+1qEuUc70cb7Z/dyMONpheldefkKJXZDF9HelTz/UnwEd00Tre698VGN1IX/sV7WTQJFCY+ypArfNx9mCzaEhMt0U60yGkIPh8wXqNG10YhgzPIw3Lvd/36FnRlTBXOZeJMbxFxhdJmSdeOQ=验证签名:1

【数据加解密】

 1 //加密数据
 2 function sslEncrypt($source, $type, $key) {
 3     $maxlength = 117;
 4     $output = ‘‘;
 5     while ($source) {
 6         $input = substr($source, 0, $maxlength);
 7         $source = substr($source, $maxlength);
 8         if ($type == ‘private‘) {
 9             $ok = openssl_private_encrypt($input, $encrypted, $key);
10         } else {
11             $ok = openssl_public_encrypt($input, $encrypted, $key);
12         }
13         $output .= $encrypted;
14     }
15     return $output;
16 }
17 //解密数据
18 function sslDecrypt($source, $type, $key) {
19     $maxlength = 128;
20     $output = ‘‘;
21     while ($source) {
22         $input = substr($source, 0, $maxlength);
23         $source = substr($source, $maxlength);
24         if ($type == ‘private‘) {
25             $ok = openssl_private_decrypt($input, $out, $key);
26         } else {
27             $ok = openssl_public_decrypt($input, $out, $key);
28         }
29         $output .= $out;
30     }
31     return $output;
32 }
33 $data = ‘php-rsa‘;
34 $privatekey = openssl_get_privatekey(file_get_contents(‘my_rsa_private_key.pem‘));
35 $publickey = openssl_get_publickey(file_get_contents(‘my_rsa_public_key.pem‘));
36 $sign = base64_encode(sslEncrypt($data, ‘private‘, $privatekey));
37 $jiemi = sslDecrypt(base64_decode($sign), ‘public‘, $publickey);38 echo ‘加密数据:‘.$data;39 echo ‘加密结果:‘.$sign;40 echo ‘解密数据:‘.$jiemi;

运行结果如下:加密数据:php-rsa加密结果:aMCpl34vXbofR7a3OPPLElQg6jwG+xbdIsdfYGeVPtIhVp0INMu/0p9M8h+JiBBmGL/WVY9ynbrvNH6QtLXDoW23rm6EWPPKn53EIqt/9jM/fDX8EyaAvhIuaSJ2Q7dxz4hNF+Ykm0XZ5ytsCB71zYVPYfaHyo3Xk+VkZ/JvznE=解密数据:php-rsa

原文地址:https://www.cnblogs.com/firstlady/p/11327204.html

时间: 2024-11-05 16:12:05

php RSA公钥私钥加解密和验证用法的相关文章

Android 获取签名公钥 和 公钥私钥加解密

public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPack

【加解密专辑】对接触到的PGP、RSA、AES加解密算法整理

先贴代码,有空再整理思路 PGP加密 using System; using System.IO; using Org.BouncyCastle.Bcpg; using Org.BouncyCastle.Bcpg.OpenPgp; using Org.BouncyCastle.Security; using Org.BouncyCastle.Utilities.IO; using System.Linq; namespace Server5.V2.Common { public static c

公钥私钥加密解密数字证书数字签名详解

from http://codefine.co/1455.html 首先明确几个基本概念: 1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私钥,如上,用来解密公钥加密的数据. 4.摘要,对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得. 5.签名,使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名.

Java中RSA非对称密钥加解密使用示例

一.简介: RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名.这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法. 二.RSA的公钥.私钥的组成,以及加密.解密的公式可见于下表 三.使用方式: ①  假设A.B机器进行通信,已A机器为主: ②  A首先需要用自己的私钥为发送请求数据签名,并将公钥一同发送

java rsa加解密算法的实现

RSAUtils:RSA加解密的实现 package com.rsa.test; import java.io.ByteArrayOutputStream; import java.nio.charset.Charset; import java.security.Key; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import jav

9.Java 加解密技术系列之 RSA

Java 加解密技术系列之 RSA 序 概念 工作流程 RSA 代码实现 加解密结果 结束语 序 距 离上一次写博客感觉已经很长时间了,先吐槽一下,这个月以来,公司一直在加班,又是发版.上线,又是新项目太紧,具体的就不多说了,想听我吐槽的小伙伴, 可以私信给我(*^__^*) .上一篇文章,已经把对称加密的算法讲完了.从今天开始,要说说非对称加密了.因为,非对称加密真的是太重要了,我们的日常生活中,都离不开非对称加密. 概念 在说 RSA 之前,首先聊聊什么是非对称加密.在讲对称加密的时候,就曾

Java实现RSA密钥对并在加解密、加签验签中应用的实例

一.项目结构 二.代码具体实现 1.密钥对生成的两种方式:一种生成公钥私文件,一种生成公钥私串 KeyPairGenUtil.java package com.wangjinxiang.genkey.util; import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.security.Key; import java.security.KeyPair; import java.security

RSA 加解密算法

与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥. 就是有2把钥匙1.使用publicKey可以对数据进行加密2.使用Key才能对数据进行解密单方向传输用公钥加密的数据,只有私钥能解开(可用于加密):同时,使用私钥加密的数据,只有公钥能解开(签名).但是速度很慢(比私钥加密慢100到1000倍),公钥的主要算法有RSA,还包括Blowfish,Diffie-Helman等 公钥与私钥1.权威数字认证机构(CA)给所有通信主体(个人或组织)颁发公钥和私钥,彼此配对,分别唯一.

JAVA_RSA_的加解密

RSA为非对称加密算法. 数字签名的过程:1.对明文数据进行HASH加密,不可逆:2.对加密后的数据再用RSA的私钥进行二次加密. 数字签名的验证过程:1.对明文数据进行HASH加密,不可逆:2.用RSA的公钥对数字签名后的数据进行解密:3.把1的结果和2的结果进行比较是否相等. RSA加密的过程和解密的过程都需要三步:加/解密.分组.填充.这三部分每一步都可以选择各自的算法.例如:RSA/ECB/PKCS1Padding. 在这里RSA的公钥是用X509编码的. 在这里RSA的私钥使用PKCS