class RsaEncrypt
{
private $_privateKey = false;
private $_publicKey = false;
/**
* 私钥解密
* @param $data 需解密的数据
* @return string 解密后的数据
*/ public function __construct()
{
//header('Content-Type:text/html;charset=utf-8');
} /**
* @param $content
* @return string
* 解析字符串
*/
public function decryptByPrivate($content){
$rsa_bit = 2048;
$one = $rsa_bit/8;
$encrypted = hex2bin($content);
$decrytped = '';
$num = ceil(strlen($encrypted) / $one);
for($i = 0; $i < $num; $i++){
$data_part = substr($encrypted,$i * $one,$one);
$de = '';
if(openssl_private_decrypt($data_part,$de,$this->getPrivateKey())){
$decrytped .=$de;
}else{
print_r(openssl_error_string());exit;
};
}
return $decrytped;
} /**
* 公钥解密
** @param $data 需解密的数据
* @return string 解密后的数据
*/
public function decryptByPublic($data){
$decrypted = '';
openssl_public_decrypt($data,$decrypted,$this->getPublicKey());
openssl_free_key($this->_publicKey);
return $decrypted;
} /**
* 银联公钥解密
** @param $data 需解密的数据
* @return string 解密后的数据
*/
public function decryptByYinlianPublic($data){
$decrypted = '';
openssl_public_decrypt($data,$decrypted,$this->getYinlianPublicKey());
return $decrypted;
} /**
* 私钥加密
* @param $data 需加密的数据
* @return string 加密后的数据
*/
public function encryptionByPrivate($data){
$crypto = '';
$data = json_encode($data);
foreach (str_split($data, 117) as $chunk) {
openssl_private_encrypt($chunk, $encryptData, $this->getPrivateKey());
$crypto .= $encryptData;
}
openssl_free_key($this->_privateKey);
return bin2hex($crypto); } /**
* 公钥加密
* @param $data 需加密的数据
* @return string 加密后的数据
*/
public function encryptionByPublic($data){
$crypto = '';
$data = json_encode($data);
foreach (str_split($data, 117) as $chunk) {
openssl_public_encrypt($chunk,$encryptData, $this->getPublicKey());
$crypto .= $encryptData;
}
return bin2hex($crypto);
} public function encryptionByYinlianPublic($data){
$crypto = '';
$data = json_encode($data);
foreach (str_split($data, 117) as $chunk) {
openssl_public_encrypt($chunk, $encryptData, $this->getYinlianPublicKey());
$crypto .= $encryptData;
}
return bin2hex($crypto); } /**
* 获取私钥文件数据
* @return bool|resource
*/
private function getPrivateKey(){
if($this->_privateKey == false ){
$key = file_get_contents(dirname(__FILE__) . '/pem/private_key.pem');
$this->_privateKey = openssl_pkey_get_private($key);
}
return $this->_privateKey;
} /**
* 获取公钥文件数据
* @return bool|resource
*/
private function getPublicKey(){
if($this->_publicKey == false){
$key = file_get_contents(dirname(__FILE__) . '/pem/public_key.pem');
$this->_publicKey = openssl_pkey_get_public($key);
}
return $this->_publicKey;
} /**
* 获取银联公钥
* @return resource
*/
private function getYinlianPublicKey(){
$key = file_get_contents((dirname(__FILE__).'/pem/yinlian_public_key.pem'));
$public_key = openssl_pkey_get_public($key);
return $public_key;
} public function sign($data){
$method = 'SHA256';
openssl_sign($data,$sign,$this->getPrivateKey(),$method);
return $sign;
} /**
* 验签
* @param $content
* @return mixed
*/
public function verify($content){
$method = 'SHA256';
if(!openssl_verify($data,$content, $content,$this->getPublicKey(),$method)){
$error = openssl_error_string();
var_dump($error);
}else{
var_dump($data);
}
return $data;
}
}

ras 加解密类,支持截取的更多相关文章

  1. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  2. PHP版3DES加解密类

    <?php /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author:蓝凤(ilanfeng.com) * * @versio ...

  3. 3DES加解密类

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace GT.C ...

  4. php des 对称加解密类

    <?php header("Content-Type: text/html;charset=utf-8"); /** * des 对称加解密 */ class des { p ...

  5. php rsa 非对称加解密类

    <?php header("Content-Type: text/html;charset=utf-8"); /* 生成公钥.私钥对,私钥加密的内容能通过公钥解密(反过来亦可 ...

  6. C# RAS 非对称加密类 支持长字符串

    /// <summary> /// ikmb@163.com /// </summary> public class MyRAS { /// <summary> / ...

  7. php opensll加解密类

    <?php $pri = "-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQCzJc4RrAqaH2Es02XQ91Cqp/JK0yX893 ...

  8. Java 使用AES/CBC/PKCS7Padding 加解密字符串

    介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...

  9. 1.Java 加解密技术系列之 BASE64

    Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...

随机推荐

  1. DLedger —基于 raft 协议的 commitlog 存储库

    “点击获取上云帮助文档” 尊敬的阿里云用户: 您好!为方便您试用开源 RocketMQ 客户端访问阿里云MQ,我们申请了专门的优惠券,优惠券可以直接抵扣金额.请填写下您公司账号信息,点击上图,了解更多 ...

  2. Ajax--serialize应用表单数据序列化

    一.jQuery+Ajax表单数据序列化 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  3. React高阶组件 和 Render Props

    高阶组件 本质 本质是函数,将组件作为接收参数,返回一个新的组件.HOC本身不是React API,是一种基于React组合的特而形成的设计模式. 解决的问题(作用) 一句话概括:功能的复用,减少代码 ...

  4. Leetcode867.Transpose Matrix转置矩阵

    给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引. 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7] ...

  5. 推荐一个好用的git图形化工具

    之前一直用的是SmartGit,虽然贼好用,但是是收费的. 现在看到了一款免费也非常炫酷的工具,忍不住强烈推荐一下GitKraken rebase,cherry pick啥的用挺好用

  6. 【POJ 3261】Milk Patterns

    [链接]h在这里写链接 [题意] 给你一个长度为n的序列. 问你能不能在其中找到一个最长的子串.     这个子串至少出现了k次. [题解] 长度越长,就越不可能出现k次 后缀数组+二分. N最大为2 ...

  7. JavaScript--取消a标签和form的submit提交默认行为

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. MySQL用户管理+MySQL权限管理

    我们现在默认使用的都是root用户,超级管理员,拥有全部的权限! 但是,一个公司里面的数据库服务器上面可能同时运行着很多个项目的数据库! 所以,我们应该可以根据不同的项目建立不同的用户,分配不同的权限 ...

  9. ajax嵌套陷阱

    ajax嵌套陷阱 $('.ajaxupd').click(function () { $('.shadow1').show(); $('.update').show(); var tds=$(this ...

  10. [转] javascript核心

    原文:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ 对象 原型链 构造函数 执行上下文栈 执行上下文 变量对象 活动对象 作用域 ...