php 验证rsa公钥和私钥是否正确
<?php
/**
* RSA加密
*
* @param string $data 待加密数据
* @param string $publicKey 公钥
* @return string|false 加密结果
* @author SC
*/
function rsaEncrypt($data, $publicKey)
{
$ciphertext = '';
$publicKey = openssl_pkey_get_public($publicKey);
$data = str_split($data, 117); // 加密的数据长度限制为比密钥长度少11位,如128位的密钥最多加密的数据长度为117
foreach ($data as $d) {
openssl_public_encrypt($d, $crypted, $publicKey); // OPENSSL_PKCS1_PADDING
$ciphertext .= $crypted;
}
openssl_free_key($publicKey); return base64_encode($ciphertext);
} /**
* RSA解密
*
* @param string $data 待解密数据
* @param string $privateKey 私钥
* @param string 解密结果
* @author SC
*/
function rsaDecrypt($data, $privateKey)
{
$plaintext = '';
$privateKey = openssl_pkey_get_private($privateKey);
$data = base64_decode($data);
$data = str_split($data, 128);
foreach ($data as $d) {
$r = openssl_private_decrypt($d, $decrypted, $privateKey);
$plaintext .= $decrypted;
} return $plaintext;
} /**
* 生成RSA签名
*
* @param string $data 待签名数据
* @param string $privateKey 私钥
* @return string 签名
* @author SC
*/
function rsaSign($data, $privateKey)
{
$privateKey = openssl_get_privatekey($privateKey);
openssl_sign($data, $sign, $privateKey, OPENSSL_ALGO_MD5); // OPENSSL_ALGO_MD5 or OPENSSL_ALGO_SHA1(default)
openssl_free_key($privateKey); return base64_encode($sign);
} /**
* 检验RSA签名
*
* @param string $data 待签名数据
* @param string $sign 待验证签名
* @param string $publicKey 公钥
* @return bool 检验结果
* @author SC
*/
function rsaVerify($data, $sign, $publicKey)
{
$publicKey = openssl_get_publickey($publicKey);
$result = openssl_verify($data, base64_decode($sign), $publicKey, OPENSSL_ALGO_MD5); // OPENSSL_ALGO_MD5 or OPENSSL_ALGO_SHA1(default)
openssl_free_key($publicKey); return ($result == 1) ? true : false; // -1:错误;0:签名错误;1:签名正确
} $pubKey = '-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsvvkZ0EYjDcmYsRbcdEugUybF
YGM3WKZfmZQaU+jHIk0UTw2I9kDHC2wmYcIAA3fqCeJ71WvdiqJNXByUYgsKGuLC
SYUP9wqOGze0U9hNb/M8E1JHlKbo3v0oAsp8awXl7QDRsOhibJUjIdf3Gt/qwh1R
mAtYSWHi/BLfzC6nfQIDAQAB
-----END PUBLIC KEY-----';
$a = rsaEncrypt(123, $pubKey); $priKey = '-----BEGIN PRIVATE KEY-----
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAKy++RnQRiMNyZix
Ftx0S6BTJsVgYzdYpl+ZlBpT6MciTRRPDYj2QMcLbCZhwgADd+oJ4nvVa92Kok1c
HJRiCwoa4sJJhQ/3Co4bN7RT2E1v8zwTUkeUpuje/SgCynxrBeXtANGw6GJslSMh
1/ca3+rCHVGYC1hJYeL8Et/MLqd9AgMBAAECgYBJvO9KJIx71BvU0OsISaAqnLP1
FtLjQjUqo70DjAPWVP8AB0qoxy0ZifetXpdYOCLMxVFnOM/lbpMfYI1WjY9WGmDQ
C0UMpOEuk/bhqAJMIN79WpEqWvJQYFzRWw3O63SwbU3mcYgqssULk6VXhhTuCuNI
gc9D/xNyj3CsfKLgRQJBANNsErsLNeM07lOaeTRXC+OYZmz9TOIgXRliYH+r52rF
QTYGY6zfs1SgDPIZZZ+1nCA6ifkFlm4xnhptlWTZTzsCQQDRK0cGCt52Iusu0LV9
2jiY1fNP8QX4bJThT+iAuGuSZeOgzWQE1Wic6j1Rsgn6XELwY7kpZbLKXWoXLVJC
9GinAkA1J53J8vaYai1lTZgdhakSjrVpv4F99L8Ta71xO+oR2QgdKhwTUabHpvm6
QJJhRgq7u5wGxNXeXJEwec6urUgTAkAstHo2kWYgi7AGTncr0dMc30VkhZgIE3Ty
fvirYj8jiAFRofRJkC8OsoWui0XUq5lm9XlinqjK1ZJSJ86YHtKrAkBnB6+fO1/h
j1Jm7L5miQVDYE4VRlVK/oAWTlceVn7a6HUQOTQUlHAiKGxuhzB7jIyLoQWLXHyG
vpZ0T54nyQqu
-----END PRIVATE KEY-----';
$b = rsaDecrypt($a, $priKey);
echo $b; $c = rsaSign(333, $priKey);
// echo $c;
echo '<pr>';
var_dump(rsaVerify(333, $c, $pubKey));
php 验证rsa公钥和私钥是否正确的更多相关文章
- rsa公钥和私钥到底哪个才是用来加密,哪个用来解密?
本文转自:91博客:原文地址:http://www.9191boke.com/138589019.html 公钥和私钥在一些银行系统.第三方支付系统SDK中经常会遇到,刚接触公钥私钥的朋友们估计很难区 ...
- c#生成rsa公钥和私钥
c#生成rsa公钥和私钥的类库,包括加密解密,可以用在网站和winform项目 源码地址: http://download.csdn.net/detail/jine515073/8383809
- Windows 下使用OpenSSL生成RSA公钥和私钥
Windows 下使用OpenSSL生成RSA公钥和私钥 (1)下载OpenSSL 可到该地址下载OpenSSL: https://www.openssl.org/source/(https://ww ...
- RSA公钥,私钥和数字签名通用理解
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- 如何使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互 ...
- 把Java生成的RSA公钥、私钥转换成.NET使用的XML格式
import java.security.KeyFactory; import java.security.interfaces.RSAPrivateCrtKey; import java.secur ...
- 在Linux下如何使用openssl生成RSA公钥和私钥对
在<Java实现RSA密钥对并在加解密.加签验签中应用的实例>中,我们有用Java代码生成RSA密钥对,其实在Linux操作系统中,用openssl也是很容易生成密钥对的. 一.如果在ub ...
- openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
- 使用openssl生成RSA公钥和私钥对
在ubuntu上要使用openssl的话需要先进行安装,命令如下: sudo apt-get install openssl 安装完成就可以使用openssl了. 首先需要进入openssl的交互界面 ...
随机推荐
- linux第一天命令
命令 : 命令 [选项] [参数] /;根目录 用户主目录:/home/用户名 <==> ~ 1.ls 显示路径中的内容 ls [参数] [路径] ls ls -l ...
- asp.net大文件分块上传断点续传demo
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- WinDbg 图形界面功能(二)
1.2.编辑菜单 这个菜单可以提供Windbg里的各功能窗口的可选文本的编辑功能,比如源代码窗口.命令窗口等提供选择.复制.剪切和黏贴等基础编辑功能. 剪切 单击剪切上编辑菜单中,删除所选的任何文本并 ...
- PHP 鸟哥:我也曾经是“不适合”编程的人
网名:雪候鸟,大家尊称鸟哥,惠新宸 @Laruence, 是国内最有影响力的 PHP 技术专家,PHP 开发组核心成员,PECL 开发者,Zend 公司外聘顾问.他曾供职于雅虎,百度,现在新浪微博任平 ...
- 洛谷 P1231教辅的组成
题目描述 /* s->练习册(1~b)->书(b+1~a+b)->答案(a+b+1~a+b+c)->t 但是可能会有多本练习册指向同一本书,这本书又可能会指向多本答案 这样每本 ...
- subcode
在思考.查阅subcode时,我发现Magma,Sage Math软件都提供了具体的命令和例子,对subcode的认识比较具象. 例如:Sage Math中有如下命令: C1 = codes.Hamm ...
- 再做一遍floyed
#include<bits/stdc++.h> #define R register int using namespace std; const int inf=0x3f3f3f3f; ...
- mac Understand 安装破解
下载:链接:https://pan.baidu.com/s/1UvxgFnjv9pRVJmZO-J2OrQ 密码:nyd4 启动后,开始激活,点击enter License code 点击“use ...
- Linux下的find命令详解
0x01 简介 find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将查找到的子 ...
- [RK3399] ES8316+NS4150 播放视频只有背景音,播放歌曲有的有声音,有的无声音
CPU:RK3399 系统:Android 音频IC:ES8316 功放IC:NS4150 以前也在 RK3399 上调试过 ES8316,功能都正常,新主板只是更换了功放IC,就出现无声音的问题(仔 ...