cryptojs php 互通_如何实现PHP7和CryptoJS的AES加密方式互通?
以下代码来自微信sdk里面
/**
* Prpcrypt class
*
* 提供接收和推送给公众平台消息的加解密接口.
*/
class Prpcrypt
{
public $key;
function __construct($k)
{
$this->key = base64_decode($k . "=");
}
/**
* 对明文进行加密
* @param string $text 需要加密的明文
* @return string 加密后的密文
*/
public function encrypt($text, $appid)
{
try {
//获得16位随机字符串,填充到明文之前
$random = $this->getRandomStr();//"aaaabbbbccccdddd";
$text = $random . pack("N", strlen($text)) . $text . $appid;
$iv = substr($this->key, 0, 16);
$pkc_encoder = new \PKCS7Encoder;
$text = $pkc_encoder->encode($text);
$encrypted = openssl_encrypt($text, 'AES-256-CBC', substr($this->key, 0, 32), OPENSSL_ZERO_PADDING, $iv);
return array(ErrorCode::$OK, $encrypted);
} catch (Exception $e) {
//print $e;
return array(ErrorCode::$EncryptAESError, null);
}
}
/**
* 对密文进行解密
* @param string $encrypted 需要解密的密文
* @return string 解密得到的明文
*/
public function decrypt($encrypted, $appid)
{
try {
$iv = substr($this->key, 0, 16);
$decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', substr($this->key, 0, 32), OPENSSL_ZERO_PADDING, $iv);
} catch (Exception $e) {
return array(ErrorCode::$DecryptAESError, null);
}
try {
//去除补位字符
$pkc_encoder = new PKCS7Encoder;
$result = $pkc_encoder->decode($decrypted);
//去除16位随机字符串,网络字节序和AppId
if (strlen($result) < 16)
return "";
$content = substr($result, 16, strlen($result));
$len_list = unpack("N", substr($content, 0, 4));
$xml_len = $len_list[1];
$xml_content = substr($content, 4, $xml_len);
$from_appid = substr($content, $xml_len + 4);
if (!$appid)
$appid = $from_appid;
//如果传入的appid是空的,则认为是订阅号,使用数据中提取出来的appid
} catch (Exception $e) {
//print $e;
return array(ErrorCode::$IllegalBuffer, null);
}
if ($from_appid != $appid) {
return array(ErrorCode::$ValidateAppidError, null);
}
//不注释上边两行,避免传入appid是错误的情况
return array(0, $xml_content, $from_appid);
//增加appid,为了解决后面加密回复消息的时候没有appid的订阅号会无法回复
}
/**
* 随机生成16位字符串
* @return string 生成的字符串
*/
function getRandomStr()
{
$str = "";
$str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
$max = strlen($str_pol) - 1;
for ($i = 0; $i < 16; $i++) {
$str .= $str_pol[mt_rand(0, $max)];
}
return $str;
}
/**
* PKCS7Encoder class
*
* 提供基于PKCS7算法的加解密接口.
*/
class PKCS7Encoder
{
public static $block_size = 32;
/**
* 对需要加密的明文进行填充补位
* @param $text 需要进行填充补位操作的明文
* @return 补齐明文字符串
*/
function encode($text)
{
$block_size = PKCS7Encoder::$block_size;
$text_length = strlen($text);
//计算需要填充的位数
$amount_to_pad = PKCS7Encoder::$block_size - ($text_length % PKCS7Encoder::$block_size);
if ($amount_to_pad == 0) {
$amount_to_pad = PKCS7Encoder::block_size;
}
//获得补位所用的字符
$pad_chr = chr($amount_to_pad);
$tmp = "";
for ($index = 0; $index < $amount_to_pad; $index++) {
$tmp .= $pad_chr;
}
return $text . $tmp;
}
/**
* 对解密后的明文进行补位删除
* @param decrypted 解密后的明文
* @return 删除填充补位后的明文
*/
function decode($text)
{
$pad = ord(substr($text, -1));
if ($pad < 1 || $pad > 32) {
$pad = 0;
}
return substr($text, 0, (strlen($text) - $pad));
}
}
cryptojs php 互通_如何实现PHP7和CryptoJS的AES加密方式互通?相关推荐
- cryptojs php 互通_PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
本文实例讲述了PHP7实现和CryptoJS的AES加密方式互通.分享给大家供大家参考,具体如下: PHP类: class AES { /** * * @param string $string 需要 ...
- cryptojs php 互通_关于PHP7和CryptoJS的AES加密方式互通
对于PHP7与CryptoJS的AES加密的方式互通代码不能正确执行,我的测试代码为: JS端:let iv = CryptoJS.enc.Utf8.parse('1111111111111111') ...
- 0宽字符加密_前端AES加密方式分析,及其python实现
在前端常见的加密方式中AES很少使用,因为相对于非对称的RSA安全性很低,AES是典型的对称加密,密钥就在前端源码里. 案列网站是http://ewt360.com,一个并不复杂的网站,首先抓个包看看 ...
- python怎样打开加密的文件_如何在Python中解密OpenSSL AES加密的文件?
拉莫斯之舞 我将通过一些更正重新发布您的代码(我不想掩盖您的版本).当您的代码正常工作时,它不会检测到填充周围的一些错误.特别是,如果提供的解密密钥不正确,则填充逻辑可能会做一些奇怪的事情.如果您同意 ...
- aes离线解密工具_如何在Python中解密OpenSSL AES加密文件?
OpenSSL为AES加密提供了一种流行的(但不安全 - 见下文!)命令行界面: openssl aes-256-cbc -salt -in filename -out filename.enc Py ...
- AES加密_ js与C#互通
为什么80%的码农都做不了架构师?>>> javascript部分 npm install crypto-js --save 定义文件jm.js const CryptoJS = r ...
- cbc cryptojs 前后端_前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
本文涉及到的内容有:前端使用CryptoJS对数据进行DES或AES加密解密: 后端使用PHP openssl对数据进行解密和加密. 前端AES加密数据 首先在vue环境下安装crypto-js,cr ...
- 迷雾世界无限号服务器,迷雾世界部分服务器互通公告_迷雾世界部分服务器3月31日数据互通详情分析_手心游戏...
迷雾世界部分服务器3月31日数据互通公告!迷雾世界亲爱的玩家:为了优化游戏体验,更好地提升组队.交互的互动体验,开发组在3.27 - 3.30对所有玩家进行了关于数据互通的调查投票.结果显示,78%的 ...
- ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密
**PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...
- AES加密:PHP与Java互通,解密准确
AES加密:PHP与Java互通 提交表单中含大写字母解密不正确 AES加密:PHP与Java互通 参考网址:https://www.cnblogs.com/libo0125ok/p/7668026. ...
最新文章
- 使用VisualStudio2010连接CodePlex进行代码管理
- linux 登录 忘记密码,redhat linux忘记登陆密码之解决办法
- java常见的异常类型_Java几种常见的异常类型
- 老司机带你深入浅出 Collection
- 如何用 SpringBoot 实现并发登录人数控制(附代码)
- ECS 选款利器!PTS助您快速上云!
- 大爱jQuery,10美女模特有用jQuery/CSS3插入(集成点免费下载)
- C++ 深复制与浅复制 RVO问题
- Code Project - Your First C# Web Service
- 【4】搭建Docker私服harbor
- 经纬度转换为平面坐标
- 论文笔记_S2D.52_CMRNet++_运行记录
- mysql cluster集群安装全纪录
- 桌面养花-DesktopPlant v2.3.12原创汉化版
- cisco2811语音网关+callmanager拨打外线,外线拨入详解配置
- 【组合数学】知识点汇总
- 【RX解码MIPI输出】XS9922B 4通道模拟复合视频解码芯片 功能对标TP2815
- 提取网页内容-Python
- LiveZilla 详细 配置 设置 (一) 安装 wamp
- JavaScript中的作用域及作用域链
热门文章
- 摩托罗拉发布RhoElements HTML5框架
- 陈小琼,你真不好等!
- 控制标记符分水岭分割算法 此博文包含图片
- 【使用技巧】【图像编辑和处理】将GIF图缩放
- 速读-NFA的GPU加速器
- 【ArcGIS|空间分析|网络分析】6 创建路径分析模型
- dotween路径移动_使用DOTween Pro插件设置物体移动的位置、移动的方式、以及动画结束时执行方法...
- android 中国市场份额 2015,2015年安卓芯片市场分析:不再一家独大
- Nexmark: 如何设计一个流计算基准测试?
- 来吧,用设计模式来干掉 if-else 啊~