<?php

//加密

function _checkPadding($padding, $type) {

if ($type == 'en') {

switch ($padding) {

case OPENSSL_PKCS1_PADDING :

$ret = true;

break;

default :

$ret = false;

}

} else {

switch ($padding) {

case OPENSSL_PKCS1_PADDING :

case OPENSSL_NO_PADDING :

$ret = true;

break;

default :

$ret = false;

}

}

return $ret;

}

function encrypt($gcPubKey,$data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING) {

if (! _checkPadding($padding, 'en'))

echo  'padding error' ;

$len = "117";

$strArray = str_split ( $data, $len );

$ret = false;

foreach ( $strArray as $cip ) {

if (openssl_public_encrypt ( $cip, $result, $gcPubKey, $padding )) {

$ret .= $result;

}

}

$s = $ret;

$hex = _encode ( $s, "hex" );

$ret = _encode ( $ret, "base64" );

return $ret;

}

function _encode($data, $code) {

switch (strtolower ( $code )) {

case 'base64' :

$data = base64_encode ( $data );

break;

case 'hex' :

$data = bin2hex ( $data );

break;

case 'bin' :

default :

}

return $data;

}

//将XML转为array

function xmlToArray($xml)

{

//禁止引用外部xml实体

libxml_disable_entity_loader(true);

$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

return $values;

}

//解密

function decrypt($data, $code = 'base64', $padding = OPENSSL_PKCS1_PADDING, $rev = false,$priKey) {

$ret = false;

$data = _decode ( $data, $code );

if (! _checkPadding ( $padding, 'de' ))

echo  'padding error' ;

if ($data != false) {

$len = "128";

$strArray = str_split ( $data, $len );

$result = '';

foreach ( $strArray as $cip ) {

if (openssl_private_decrypt ( $cip, $result, $priKey, $padding )) {

$ret .= $result;

}

}

}

return $ret;

}

function _decode($data, $code) {

switch (strtolower ( $code )) {

case 'base64' :

$data = base64_decode ( $data );

break;

case 'hex' :

$data = _hex2bin ( $data );

break;

case 'bin' :

default :

}

return $data;

}

function _hex2bin($hex = false) {

$ret = $hex !== false && preg_match ( '/^[0-9a-fA-F]+$/i', $hex ) ? pack ( "H*", $hex ) : false;

return $ret;

}

//将XML转为array

private function xmlToArray($xml)

{

//禁止引用外部xml实体

libxml_disable_entity_loader(true);

$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);

return $values;

}

关于支付时rsa加密解密的函数的更多相关文章

  1. RSA加密解密算法

    /** * RSA加密解密算法 * Class Rsa */ class Rsa { /** * 获取pem格式的公钥 * @param $public_key 公钥文件路径或者字符串 * @retu ...

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

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

  3. OpenSSL 中 RSA 加密解密实现源代码分析

    1.RSA 公钥和私钥的组成.以及加密和解密的公式: 2.模指数运算: 先做指数运算,再做模运算.如 5^3 mod 7 = 125 mod 7 = 6 3.RSA加密算法流程: 选择一对不同的.而且 ...

  4. RSA加密解密及RSA签名和验证

    原文:RSA加密解密及RSA签名和验证 1.RSA加密解密: (1)获取密钥,这里是产生密钥,实际应用中可以从各种存储介质上读取密钥 (2)加密 (3)解密2.RSA签名和验证 (1)获取密钥,这里是 ...

  5. 最通俗易懂的RSA加密解密指导

    前言 RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙. 因为加密的钥匙是公开的,所又称公钥,解密的钥匙是不公开的,所以称为私钥. 密钥 关于RSA加密有很多 ...

  6. 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输

    Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...

  7. C# Java间进行RSA加密解密交互(二)

    原文:C# Java间进行RSA加密解密交互(二) 接着前面一篇文章C# Java间进行RSA加密解密交互,继续探讨这个问题. 在前面,虽然已经实现了C# Java间进行RSA加密解密交互,但是还是与 ...

  8. RSA加密解密和读取公钥、私钥

    /// <summary>     /// RSA加密解密及RSA签名和验证    /// </summary>     public class RSADE    {    ...

  9. RSA加密解密及RSA加签验签

    RSA安全性应用场景说明 在刚接触RSA的时候,会混淆RSA加密解密和RSA加签验签的概念.简单来说加密解密是公钥加密私钥解密,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解 ...

随机推荐

  1. HTML知识点总结之div、section标签

    div元素 div是块级元素,相当于一个容器,在语义上不代表任何特定类型的内容.主要用作大的框架布局,也就是说网页的骨架主要通过div来架设的,而网页的血肉则是有span.p或者ul等元素完成. se ...

  2. my discipline life

    周一  ~   周五 7.30 ---  8.00 起床,洗漱等 8.00 ---  8.30 默写8-10个英语单词 8.35 ---  9.10 吃早餐,骑自行车去公司 12.20  ---  1 ...

  3. 谈谈promise

    最近在看<你不知道的javascript中卷>,发觉作者花了基本一半的篇幅去讲异步和promise,觉得有必要总结一下. 其实本文的目的是想手写一个Promise的,无奈总结着总结着发觉篇 ...

  4. Hyperledger Fabric Model——超级账本组成模型

    超级账本组成模型 本文主要讲述Hyperledger Fabric的关键设计特性,并细述如何实现了一个全面的.可定制的企业级区块链解决方案: 资产定义--资产这里理解为任何具有货币价值的东西,它们都可 ...

  5. php写一个简洁的登录页面

    在学php中,刚刚看完实战演练就写了个登录页面 1.表单解析图 这是我们要写的 先用html写个表单先 <html> <head> <title>login< ...

  6. MyBatis工作原理

    Mybatis工作原理: 我们的应用程序通过mybatis提供的api,增删改查方法来访问数据库,api底层调用了jdbc ,只不过mybatis对jdbc的封装是不完全封装,里面的sql语句需要我们 ...

  7. 97、爬虫框架scrapy

    本篇导航: 介绍与安装 命令行工具 项目结构以及爬虫应用简介 Spiders 其它介绍 爬取亚马逊商品信息   一.介绍与安装 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, ...

  8. NYOJ 2356 哈希计划(模拟)

    题目链接: http://acm.nyist.me/JudgeOnline/problem.php?id=2356 题目描述 众所周知,LLM的算法之所以菜,就是因为成天打游戏,最近LLM突然想玩&l ...

  9. HDU 2063 过山车(模板—— 二分图最大匹配问题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063  解题思路: 二分图最大匹配模板题. AC代码: #include<stdio.h> ...

  10. Linux的ls命令在Windows中的应用

    Linux的ls命令在Windows中的应用 注:ls是Linux中的命令.其作用是列出当前目录下的文件与文件夹.效果等同于Wndows中的dir指令. 如下图 下面是详细步骤 步骤一.在桌面新建一个 ...