由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用。

以下php版本是适用于对接java接口,java适用密钥再php语言使用是需要添加

-----BEGIN CERTIFICATE----- 

-----END CERTIFICATE-----

  

使用密钥:

加密公钥  public_key.cer

解密私钥  private_key.key

签名私钥 sign_key.key

验签公钥 verify.cer

<?php
class RSAUtils{
//加密公钥
function redPukey()
{
//拼接加密公钥路径
$encryptionKeyPath="D:/encryptions.cer";
$encryptionKey4Server = file_get_contents($encryptionKeyPath); $pem = chunk_split(base64_encode($encryptionKey4Server),64,"\n");//转换为pem格式的公钥
$pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
$publicKey = openssl_pkey_get_public($pem);
return $publicKey;
} //解密私钥
function redPikey()
{
//拼接解密私钥路径
$decryptKeyPath="D:/decrypts.key";
$decryptKey4Server = file_get_contents($decryptKeyPath); $pem = chunk_split($decryptKey4Server,64,"\n");//转换为pem格式的私钥
$pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
$privateKey = openssl_pkey_get_private($pem);
return $privateKey;
} //签名私钥
function redSignkey()
{
//拼接签名路径
$signKeyPath="D:/DEMO/sign.key";
$signKey4Server = file_get_contents($signKeyPath); $pem = chunk_split($signKey4Server,64,"\n");//转换为pem格式的私钥
$pem = "-----BEGIN PRIVATE KEY-----\n".$pem."-----END PRIVATE KEY-----\n";
$signKey = openssl_pkey_get_private($pem);
return $signKey;
} //验签公钥
function redVerifykey()
{
//拼接验签路径
$verifyKeyPath="D:/DEMO/verify.cer";
$verifyKey4Server = file_get_contents($verifyKeyPath); $pem = chunk_split(base64_encode($verifyKey4Server),64,"\n");//转换为pem格式的公钥
$pem = "-----BEGIN CERTIFICATE-----\n".$pem."-----END CERTIFICATE-----\n";
$verifyKey = openssl_pkey_get_public($pem);
return $verifyKey;
} //公钥加密
function pubkeyEncrypt($source_data, $pu_key) {
$data = "";
$dataArray = str_split($source_data, 117);
foreach ($dataArray as $value) {
$encryptedTemp = "";
openssl_public_encrypt($value,$encryptedTemp,$pu_key);//公钥加密
$data .= base64_encode($encryptedTemp);
}
return $data;
} //私钥解密
function pikeyDecrypt($eccryptData,$decryptKey) {
$decrypted = "";
$decodeStr = base64_decode($eccryptData);
$enArray = str_split($decodeStr, 256); foreach ($enArray as $va) {
openssl_private_decrypt($va,$decryptedTemp,$decryptKey);//私钥解密
$decrypted .= $decryptedTemp;
}
return $decrypted;
} }
?>

注意:

有时候用base64_encode加密后,以GET的形式传到其他页面,用base64_decode解密的时候,出现乱码.

 遇到这个问题的时候,我就纳闷了,为什么有一些能正确解密,但是有一些却出现乱码呢?

后来经过检查,发现有一些中文字符,用GET形式传过来的时候,+号会被替换成空格.

为了防止出现乱码的情况,我做了一步替换,然后再解密,果然,乱码的问题,不复存在了!

比如你以GET的形式传过来一个oid变量,那么解密还原的时候,先用+号替换空格.那么输出就正常了.

如下: $oid=base64_decode(str_replace(" ","+",$_GET[oid]));

php rsa 加密、解密、签名、验签的更多相关文章

  1. Java RSA 加密 解密 签名 验签

    原文:http://gaofulai1988.iteye.com/blog/2262802 import java.io.FileInputStream; import java.io.FileOut ...

  2. RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密

    原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...

  3. js rsa sign使用笔记(加密,解密,签名,验签)

    你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...

  4. C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic

    C#在using System.Security.Cryptography下有 DESCryptoServiceProvider RSACryptoServiceProvider DESCryptoS ...

  5. 支付接口中常用的加密解密以及验签rsa,md5,sha

    一.常用加密类型分类 1.对称加密:采用单钥对信息进行加密和解密,即同一个秘钥既可以对信息进行加密,也可以进行解密.此类型称之为对称加密.特点速度快,常用于对大量数据信息或文件加密时使用.常用例子:D ...

  6. RSA加密解密与加签验签

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年7月首次在美国公布 ...

  7. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  8. Java使用RSA加密解密签名及校验

    RSA加密解密类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...

  9. 数据安全管理:RSA加密算法,签名验签流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.RSA算法简介 1.加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用.可以在不直接传递密钥的情况下,完成加 ...

  10. C#的RSA加密解密签名,就为了支持PEM PKCS#8格式密钥对的导入导出

    差点造了一整个轮子 .Net Framework 4.5 里面的RSA功能,并未提供简单对PEM密钥格式的支持(.Net Core有咩?),差点(还远着)造了一整个轮子,就为了支持PEM PKCS#8 ...

随机推荐

  1. jxl创Excel档java示例代码说明

    记得下载 并 导入jxl.jar 包,免积分下载地址:http://download.csdn.net/detail/u010011052/7561041 package Test; import j ...

  2. 如何使用autolayout的UIView加入动画

    hi,all: 在经过了一番犹豫之后,我决定将我自己做的这个小APP的源代码发布给大家: 其出发点是和大家一起学习iOS开发,仅供学习參考之用. 之前代码是托管与gitlab 上的.今天我将其pull ...

  3. Spring MVC框架搭建

    Spring MVC篇一.搭建Spring MVC框架 本项目旨在搭建一个简单的Spring MVC框架,了解Spring MVC的基础配置等内容. 一.项目结构 本项目使用idea intellij ...

  4. iOS如何兼容的应用程序32位系统和64Bit系统

    苹果发布iPhone5S时刻,64应用程序位去了眼前.当时我看到苹果公布的官方数据iOS7.x的SDK支撑64位应用程序.而内置的应用程序已经64位置. 我记得自己刚刚接触电脑时还有16位的系统,指针 ...

  5. QR代码简单

    QR代码(Quick Response Code, 高速响应码)属于二维矩阵码在一个.由DENSO(日本电装)公司开发,由JIS和ISO将其标准化. QR码分为两种模式:模式1.模式2.当中.模式1相 ...

  6. leaflet开源地图库源码 浏览器&移动设备判断(browser.js)备份

    <script> var isIe = !-[1,]; // alert('ie9 之前'+isIe); var ie = 'ActiveXObject' in window; //ale ...

  7. Youtube最佳Red5 官方视频下载指南,字幕【亲测成功】

    前言 最近在研究Red5 流媒体服务框架,官网上的信息足以让一个新手入门 有官方參考手冊 -- 高速了解red5的相关信息 有Red5 on Stackoverflow  -- 在上面能够提问或者回答 ...

  8. 学习笔记 broswerify + watchify + beefy

    broswerify “Browserify lets you require('modules') in the browser by bundling up all of your depende ...

  9. SQL 将URL编码转汉字!

    原文:SQL 将URL编码转汉字! -- ============================================= -- 作 者: ruijc -- 描 述: 将Url编码转明文字符 ...

  10. Notification使用以及PendingIntent.getActivity() (转)

    public void sendNotification(Context ctx,String message) { //get the notification manager String ns ...