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. 使用log4j打印日志

    在项目中我们必不可少需要打印日志,通过日志我们可以查看系统的运行状态是否正常,当程序出现异常的时候,我们也可以通过查看日志来定位问题的位置,给程序员的工作带来了极大的便利. 以下这边博客的内容是我从一 ...

  2. 阿里云DMS发布数据库网关服务: 打通网络限制 开启数据库统一管理的万能钥匙

    概述 阿里云数据管理DMS在云端可提供专业的数据库服务,除对标本地数据库软件的基础功能外,还包含性能诊断.数据追踪.跨实例SQL查询(含异构数据库类型之间)等专业性功能,同时提供审计安全和企业级数据库 ...

  3. bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...

  4. HDU 2639 第K大背包问题

    //状态方程和01背包类似,dp[j][k]表示背包容量为j的第k大背包的值.......... //应当注意的是此时dp[j][1.....k]应当是递减的.................... ...

  5. CLTPHP5.0发布

    CLTPHP内容管理系统,包含系统设置,权限管理,模型管理,数据库管理,栏目管理,会员管理,网站功能,模版管理,微信管理等相关模块.   CLTPHP内容管理系统=ThinkPHP5+layuiAdm ...

  6. 【GDOI2017 day1】取石子游戏 线段树+区间合并

    题面 如果给你一棵有根树,树根为 1,并且树的每个结点上有一个权值,现在我想知道每个点,除它所在子树以外的结点权值集合的 mex,怎么做呢? 在这里,mex 是定义在集合上的函数,mex(S) 表示 ...

  7. Eclipse创建jsp web项目

    Eclipse 是一个开放源代码的.基于Java的可扩展开发平台.就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.幸运的是,Eclipse 附带了一个标准的插件集,包括Java开 ...

  8. 使用split_size优化的ODPS SQL的场景

    使用split_size优化的ODPS SQL的场景 首先有两个大背景需要说明如下:说明1:split_size,设定一个map的最大数据输入量,单位M,默认256M.用户可以通过控制这个变量,从而达 ...

  9. WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放

    WinForm 实现主程序(exe)与其关联类库(*.dll)分开存放    开发环境:   Microsoft Windows 7 SP1 Microsoft.NET Framework 4.0 ( ...

  10. No.1 Verilog HDL简介

       硬件描述语言HDL(Hardware Description Language)是一种用形式化方法来描述数字电路和系统的语言.设计者利用HDL可以从抽象到具体逐层描述自己的设计思想,用一系列的分 ...