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. Oracle查询表里的重复数据方法

    select id from group by id having count(*) > 1 按照id分组并计数,某个id号那一组的数量超过1条则认为重复. 如何查询重复的数据 select 字 ...

  2. Listview的条目item内的点击响应事件

    还是这张图 这里的历史列表就是一个ListView,抛开该界面中ScrollView或者RecycleView与该ListView会有冲突,所谓的冲突,说白了就是父控件与子控件两者间的关系冲突,该冲突 ...

  3. phpstorm服务器配置

    转载自百度经验https://jingyan.baidu.com/article/84b4f565ea229960f6da320c.html 这个教程里面后面修改的两步目前没有用到,之后可能会用到,暂 ...

  4. Hdu 1150

    Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. AndroidStudio离线打包MUI集成JPush极光推送并在java后端管理推送

    1.AndroidStudio离线打包MUI 如何离线打包请参看上篇随笔<AndroidStudio离线打包MUI> 2.集成极光推送 官方文档:https://docs.jiguang. ...

  6. PYTHON网络爬虫与信息提取[正则表达式的使用](单元七)

    正则表达式由字符和操作符构成 . 表示任何单个字符 []字符集,对单个字符给出取值范围 [abc]或者关系  [a-z]表示 [^abc]表示非这里面的东西 非字符集 * 表示星号之前的字符出现0次或 ...

  7. Linux之脚本安装包

    1.脚本安装包 脚本安装包不是独立的软软件包类型,常见的安装时源码包 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装 类似于windows下的软件安装 一般是硬件驱 ...

  8. node 写的简单爬虫(一)

    安装cheerio npm install cheerio --save 引入http和cheeri var http=require("http"); var cheerio=r ...

  9. oracle加锁

    锁 insert into TEST values(5); 加row exclusive锁,和row share相同,但也禁止用share方式加锁. Create index idx_test on ...

  10. 开启远程XUL

    参考:https://developer.mozilla.org/zh-cn/Remote_XUL firefox自4.0起(2011年4月版本,目前最新版为13.0),开始禁用远程XUL,这阻碍了初 ...