php 加密cer_php 生成RSA非对称加密用的证书-cer-pfx文件
首先,关于RSA的加密介绍文章,就不多说了。直接看这个网页吧(作者写的计算机科普文章是极好的)
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
我要实现的功能就是通过这对公钥和密钥,实现客户端软件对密码进行加密(采用公钥),然后网站端(php)采用密钥进行解密验证。
开始吧。
php服务端利用内置函数生成公钥和密钥。记得这需要php服务器安装了openssl扩展。先生成cer文件和pfx文件。cer文件相当于公钥(可以发给客户端),pfx是密钥(必须严格保存于服务器端不能泄露)。
$dn = array(
"countryName" => 'zh', //所在国家名称
"stateOrProvinceName" => 'GuangDong', //所在省份名称
"localityName" => 'ShenZhen', //所在城市名称
"organizationName" => 'baibai', //注册人姓名
"organizationalUnitName" => 'company', //组织名称
"commonName" => 'bbb', //公共名称
"emailAddress" => '123@.qq.com' //邮箱
);
$privkeypass = 'cf'; //私钥密码
$numberofdays = 3650; //有效时长
$cerpath = "./test.cer"; //生成证书路径
$pfxpath = "./test.pfx"; //密钥文件路径//生成证书
$privkey = openssl_pkey_new();
$csr = openssl_csr_new($dn, $privkey);
$sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays);
openssl_x509_export_to_file($sscert, $cerpath); //导出证书到文件
//openssl_pkcs12_export_to_file($sscert, $pfxpath, $privkey, $privkeypass); //生成密钥文件
openssl_pkey_export_to_file($privkey, $pfxpath); //生成密钥文件
以下是是php端进行简单测试的代码:
/*
//私钥加密
$cer_key = file_get_contents($pfxpath); //获取密钥内容
openssl_pkcs12_read($cer_key, $certs, $privkeypass);
openssl_sign($data, $signMsg, $certs['pkey'],OPENSSL_ALGO_SHA1); //注册生成加密信息
$signMsg = base64_encode($signMsg); //base64转码加密信息
//echo $signMsg;
//公钥解密
$cer_key = file_get_contents($cerpath); //获取证书内容
$unsignMsg=base64_decode($signMsg);//base64解码加密信息
$cer = openssl_x509_read($cer_key); //读取公钥
$res = openssl_verify($data, $unsignMsg, $cer); //验证
echo $res; //输出验证结果,1:验证成功,0:验证失败
*/
$data = "123456";
$crypted = "";
$key = file_get_contents($cerpath);
//公钥加密
openssl_public_encrypt($data, $crypted, $key);
echo base64_encode($crypted)."
";
//echo $crypted."
";
//私钥解密
$decrypted = "";
$s = file_get_contents($pfxpath);
//echo "
$s
";
$key2 = openssl_pkey_get_private(file_get_contents($pfxpath));
if(openssl_private_decrypt($crypted, $decrypted, $key2)){
echo $decrypted;
}
else{
echo "failed";
}
客户端通过加载cer文件,将要加密的文本用公钥加密。以下是一个函数
//通过读取本地的cer文件,得到公钥,然后对文本内容加密,返回加密后的文本,最后传到服务器端,与密钥进行比对
public static String getRSAText(Context context,String strText){
try {
//读取证书文件
InputStream inStream = context.getResources().getAssets().open("test.cer");
//创建X509工厂类
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//创建证书对象
X509Certificate cert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
Cipher c1 = Cipher.getInstance("RSA/None/PKCS1Padding");
c1.init(Cipher.PUBLIC_KEY, cert);
byte[] cipherText = c1.doFinal(strText.getBytes());
//base64转换一下,方便传输
String res = Base64.encodeToString(cipherText,Base64.DEFAULT);
return res;
}
catch (InvalidKeyException e){
}
catch (IOException e){
}
catch (CertificateException e){
}
catch (NoSuchPaddingException e){
}
catch (IllegalBlockSizeException e){
}
catch (BadPaddingException e){
}
catch (NoSuchAlgorithmException e){
}
return "";
}
下边是php端用pfx文件(里边放有密钥)进行解密的代码。我改写成了一个函数。参数是pfx文件路径,pfx文件名,要解密的字符串
function getPassword( $path,$pfx_file_name,$str ){
$pfxpath = $path . "/public/$pfx_file_name"; //密钥文件路径
//$cerpath = "./test.cer"; //生成证书路径
//私钥解密
$decrypted = "";
$key2 = openssl_pkey_get_private(file_get_contents($pfxpath));
$res = openssl_private_decrypt(base64_decode($str), $decrypted, $key2);
if($res){
return $decrypted;
}
else{
return "";
}
}
php 加密cer_php 生成RSA非对称加密用的证书-cer-pfx文件相关推荐
- 前后端数据加密传输 RSA非对称加密
任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密. 实现方式:公钥加密,私钥解密. 研究进度:javascript与java端 ...
- 微信小程序RSA非对称加密。
因公司做的产品为金融项目,所以对数据安全性有很高要求,因为项目中的数据都会通过3DES 对称加密,和RSA非对称加密进行数据传输. 在这里先简单介绍一下什么是对称加密和非对称加密 对称加密:对称加密采 ...
- RSA非对称加密和解密(同时生成密钥)
RSA非对称加密和解密(同时生成密钥) 准备jar包 bcprov-jdk16-1.46.jar commons-codec-1.15.jar 获取jar地址:https://mvnrepositor ...
- JSON 接口如何实现 RSA 非对称加密与签名
代码地址如下: http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套 ...
- php利用openssl实现RSA非对称加密签名
来源:http://www.webiji.com/archives/412 php利用openssl实现RSA非对称加密签名 1. 先用php生成一对公钥和私钥 $res = openssl_pkey ...
- Atitit RSA非对称加密原理与解决方案
Atitit RSA非对称加密原理与解决方案 1.1. 一.一点历史 1 1.2. 八.加密和解密 2 1.3. 二.基于RSA的消息传递机制 3 1.4. 基于rsa的授权验证机器码 4 1.5. ...
- java rsa 117_java实现RSA非对称加密解密
之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...
- Springboot+RSA非对称加密
这是百度百科对(对称加密丶非对称加密)的解释: (1)对称加密算法在加密和解密时使用的是同一个秘钥. (2)非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称 ...
- 数据加密 RSA非对称加密篇
先把代码贴上来,理论后续补充,暂时可先参考数据加密 总篇 package com.jlpay.partner.utils;import android.util.Base64;import java. ...
最新文章
- ci持续集成工程师前景_持续集成CI---失败原因
- python中dataframe导出文件_使用Python将Pandas DataFrame导出为PDF文件
- JS 装饰器(Decorator)场景实战
- 解决React Native unable to load script from assets index.android.bundle on windows
- layui如何存在多个弹窗_layer重复弹出(layui弹层同时存在多个)的解决方法_心善_前端开发者...
- python 查询sqlserver 视图_在Python中,将SQL查询的输出显示为表,就像在SQL中一样...
- 程序员面试金典——5.7找出缺失的整数
- 电商网站商品图片放大镜实现
- LAMP笔记之Apache篇(2)
- 用AB对Webservice做压力测试
- java有哪些服务器_java服务器有哪些?
- 查看twitter浏览记录_如何查看Twitter提及的通知,但不喜欢或转发
- 简体字转换繁体字的winfrom小程序
- ubuntu 安装 xv 图像查看软件
- 入职5年前端工程师针对web前端小白,作出的职业规划建议
- BZOJ 3270: 博物馆 1778: 驱逐猪猡 【概率DP+高斯消元】
- RHCI 搭建 rhca 教室环境
- 英语6级词汇量【原创】
- 博客大巴,自动登录,并发布信息开发小计。
- 【计算机科学】【2018.12】基于深度学习技术的材料识别
热门文章
- spring security简单教程以及实现完全前后端分离
- leetcode 简单题合集(Java版)
- 前端如何实现:在不刷新页面的情况下实时看到自己的评论
- 双粗虚线中间一条实线_马路中间有一条黄色虚线和一条实线,能超车吗?
- anaconda如何保存python文件_想在Jupyter Notebook(Anaconda)中保存并运行Python脚本
- deepin如何布署python_【玩转deepin】简单三步,教你在deepin15.11上安装Python3.7.4
- java,获取微信分享需要的获取 signature、jsapi_ticket和access_token
- C++ string 使用详解(含C++20新特性)
- leetcode -- 279. Perfect Squares
- 洛谷——P1223 排队接水