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. NOIP模拟题17.9.26

    B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...

  2. P1460 健康的荷斯坦奶牛 Healthy Holsteins

    P1460 健康的荷斯坦奶牛 Healthy Holsteins 题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保 ...

  3. Python3.7.4入门-4模块

    4 模块 Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们.这样的文件被称作 模块 :模块中的定义可以 导入 到其它模块或者 主 模块 模块是一个包含Python ...

  4. Katalon系列二十一:用例中语句失败处理

    假如有一个用例:1.登陆2.下单3.对历史单评价4.退出 情况一:当第1步执行失败时,我们希望用例不再执行,因为再执行也没有意义了,反而浪费时间:情况二:当第2步执行失败时,我们希望能略过第2步操作, ...

  5. Vue源码探究-虚拟DOM的渲染

    Vue源码探究-虚拟DOM的渲染 在虚拟节点的实现一篇中,除了知道了 VNode 类的实现之外,还简要地整理了一下DOM渲染的路径.在这一篇中,主要来分析一下两条路径的具体实现代码. 按照创建 Vue ...

  6. 初探uni-app

    第一步:下载 第二步:安装 第三步:创建项目 第四步:项目目录 项目运行 项目效果为 打包为原生App(云端) 运行打包 使用vue 效果如下,并不好看 使用代码如下 未完,待续.... 就是对着官网 ...

  7. 阿里云linux服务器到期后续费,网站打不开解决方法之一

    续费后打不开网站,可能会出现不同情况,这里只记录我遇到的问题 问题描述:服务器到期后续费,网站打不开. 解决尝试: 1.重启服务器nginx    /etc/init.d/nginx restart ...

  8. BOM的对象总结(location,screen,navigator,history)

    location对象 专门保存当前窗口正在打开的url的对象. 常用的属性有: location.href 保存了完整的url:这种方式做常用 在当前窗口打开: location.href=新url ...

  9. sqlserver 带返回值的存储过程

    create proc test ) output as begin select @result = 'haha' ; end go ), @count int exec @count = test ...

  10. 【JZOJ4934】【NOIP2017GDKOI模拟1.12】a

    helpless fucking 结论:如果一个数可以被对于a序列中每个数的最大公约数整除,那么它就是好的. Bitch Man 感性证明: 贪心地想,对于a序列中的任意两个数,它们的最大公约数可由这 ...