携程供应商接口数据解密AES/CBC/PKCS5Padding
2019独角兽企业重金招聘Python工程师标准>>>
function aes128_cbc_encrypt($key, $data, $iv) {if(16 !== strlen($key)) $key = hash('MD5', $key, true);if(16 !== strlen($iv)) $iv = hash('MD5', $iv, true);$padding = 16 - (strlen($data) % 16);$data .= str_repeat(chr($padding), $padding);return mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);}function aes128_cbc_decrypt($key, $data, $iv) {if(16 !== strlen($key)) $key = hash('MD5', $key, true);if(16 !== strlen($iv)) $iv = hash('MD5', $iv, true);$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);$padding = ord($data[strlen($data) - 1]);return substr($data, 0, -$padding);}function decode_bytes($text){$bytes=array();for($i=0;$i<strlen($text);$i+=2){$char=$text[$i];$bytes[$i/2]=chr((ord($char)-ord('a'))<<4);$char=$text[$i+1];$bytes[$i/2]=chr(ord($bytes[$i/2])+(ord($char)-ord('a')));}return join('',$bytes);}function encode_bytes($text){$bytes=array();for($i=0;$i<strlen($text);$i++){$bytes[]=chr(((ord($text[$i])>>4)&15)+ord('a'));$bytes[]=chr((ord($text[$i]) & 15)+ord('a'));}return join('',$bytes);}function test(){$key='';$vt='';//$encrypted='jojihabbaogpamnnggmlkpflpmogmlclkeoglcikapgpbconldjjmlfjapfblhnobglgakiehkcgfnnmbojfpgmbcnfbjlcfjpjgcgjoanihcaiiafggfgnnjflfccgj';$encrypted=$this->encode_bytes($this->aes128_cbc_encrypt($key,'123',$vt));$foo = $this->aes128_cbc_decrypt($key,$this->decode_bytes($encrypted),$vt);pr($foo);}
PKCS5Padding与PKCS7Padding当数据块大小是8时是一样的效果,事实上PKCS5Padding不能直接用户在AES上,因为AES要求的数据块至少是16字节以上。所以PKCS5Padding实际上是PKCS7Padding的别名来用。
Credit https://gist.github.com/RiANOl/1077723
JAVA AES
/*** 加密方法** @param encData 要加密的数据* @param secretKey 密钥,16位的数字和字母* @param vector 初始化向量,16位的数字和字母* @return* @throws Exception*/public static String encrypt(String encData, String secretKey, String vector) {try {byte[] raw = secretKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"IvParameterSpec iv = new IvParameterSpec(vector.getBytes("utf-8"));// 使用CBC模式,需要一个向量iv,可增加加密算法的强度cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] encrypted = cipher.doFinal(encData.getBytes("utf-8"));return encodeBytes(encrypted);} catch (Exception e) {e.printStackTrace();}return null;}/*** 解密方法** @param decData 要解密的数据* @param secretKey 密钥 ,16位的数字和字母* @param vector 初始化向量,16位的数字和字母* @return* @throws Exception*/public static String decrypt(String decData, String secretKey, String vector) {try {byte[] raw = secretKey.getBytes("utf-8");SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");IvParameterSpec iv = new IvParameterSpec(vector.getBytes("utf-8"));cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] encrypted1 = decodeBytes(decData);byte[] original = cipher.doFinal(encrypted1);return new String(original, "utf-8");} catch (Exception e) {e.printStackTrace();}return null;}/*** 转16进制** @param bytes* @return*/public static String encodeBytes(byte[] bytes) {StringBuffer strBuf = new StringBuffer();for (int i = 0; i < bytes.length; i++) {strBuf.append((char) (((bytes[i] >> 4) & 0xF) + ((int) 'a')));strBuf.append((char) (((bytes[i]) & 0xF) + ((int) 'a')));}return strBuf.toString();}/*** 转字节数组** @param str* @return*/public static byte[] decodeBytes(String str) {byte[] bytes = new byte[str.length() / 2];for (int i = 0; i < str.length(); i += 2) {char c = str.charAt(i);bytes[i / 2] = (byte) ((c - 'a') << 4);c = str.charAt(i + 1);bytes[i / 2] += (c - 'a');}return bytes;}
转载于:https://my.oschina.net/swingcoder/blog/1620271
携程供应商接口数据解密AES/CBC/PKCS5Padding相关推荐
- 干货 | 携程机票大数据架构最佳实践
本文转载自 携程技术中心(ctriptech) 公众号,本文PPT请点击下面 阅读原文 获取 作者简介 许鹏,携程机票大数据基础平台Leader,负责平台的构建和运维.深度掌握各种大数据开源产品,如S ...
- 干货 | JuiceFS 在携程海量冷数据场景下的实践
作者简介 妙成,携程云原生研发工程师,主要从事Elasticsearch.JuiceFS的研发运维,关注分布式数据库.NoSQL. 小峰, 携程云原生研发工程师,主要专注于数据库容器化领域,对分布式存 ...
- 爬取携程景点评论数据【最新方法】,分析AJAX实现页数跳转的爬取方法
本文仅供技术学习使用,欢迎转载,转载请注明出处 因为朋友参加数学建模,需要景点数据,而我刚好懂一点点,就帮他写爬虫代码.在网上搜索到一些爬虫方法,但在获取景点ID时,发现现在携程的Request Pa ...
- 预告:Intel、Hulu、阿里、京东、携程等大数据实战直播
前言:由CSDN主办的SDCC 2017之大数据技术实战线上峰会将在CSDN学院举行.作为SD系列技术峰会的一部分,本次线上峰会秉承干货实料(案例)的内容原则,将邀请圈内顶尖的布道师.技术专家和技术引 ...
- python aes padding_python笔记43-加解密AES/CBC/pkcs7padding
前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...
- 多业务线亿级体量,携程的账务数据中台实践
本文为联合撰文,作者团队负责携程集团支付账务系统.消费金融账务系统.清结算和对账等工作的的开发.设计和运维工作. 一 一.前言 原先携程内部的各账务系统都是随着自身的业务发展而建立起来的,其中有些共同 ...
- java微信小程序解密AES/CBC/PKCS7Padding
摘要:微信小程序解密建议使用1.6及以上的环境使用maven下载jar包org.bouncycastlebcprov-jdk15on1.55加密类代码importorg.bouncycastle.jc ...
- 携程元旦出游数据:冰雪运动热度升级 张家口酒店一房难求
1月4日消息,因为国内疫情零星散发,旅游市场是否有受到影响?在刚刚过去的元旦小长假中,旅游市场呈现了这些新趋势. 整体而言,通过比对携程平台用户搜索关键词,机票.火车及酒店预订数据可以发现,今年元旦小 ...
- 携程回应大数据杀熟并致歉 二次支付无票是系统Bug
昨天,有网友在微博上爆料称,携程疑似再次出现"大数据杀熟"现象,理由是自己预订机票,显示总价格17548元,因为发现没有选报销凭证,于是退回去,修正一下.然后,再去支付,就告诉没有 ...
最新文章
- Backbone学习日记[1]:感性认识
- 《强化学习周刊》第13期:强化学习应用之金融
- C/C++左值性精髓(二)哪些表达式是左值,哪些是右值?----右值表达式
- linux设置套接字缓冲区的大小
- POJ 1741tree-点分治入门
- DP--POJ 2241
- 这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识
- 小程序wafer2操作数据库
- R语言如何下载及安装?——R语言安装及环境配置1
- Python图像处理库PIL的基本概念介绍(一)
- 小胜智能机器人如何和手机联网_当下热门的人工智能电话机器人会革手机的命吗?...
- 常威,你还说你不会索引优化?MYSQL索引失效的常见场景与规避方法
- 计算机启动灯光提示,开机电脑指示灯红色常亮是怎么回事?
- Chapter 9 (Classical Statistical Inference): Binary Hypothesis Testing
- 【Vivado那些事儿】VIVADO中时序报告中WNS,WHS,TNS,THS含义
- IDEA如何修改背景图片
- 一键训练 deeplabv3seg、squeezeseg、voxelnet Docker镜像安装
- C++、PHP、Java、Python学哪个好?如何才能少走弯路
- uniapp开发App引导页
- 一个初中平面几何问题