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相关推荐

  1. 干货 | 携程机票大数据架构最佳实践

    本文转载自 携程技术中心(ctriptech) 公众号,本文PPT请点击下面 阅读原文 获取 作者简介 许鹏,携程机票大数据基础平台Leader,负责平台的构建和运维.深度掌握各种大数据开源产品,如S ...

  2. 干货 | JuiceFS 在携程海量冷数据场景下的实践

    作者简介 妙成,携程云原生研发工程师,主要从事Elasticsearch.JuiceFS的研发运维,关注分布式数据库.NoSQL. 小峰, 携程云原生研发工程师,主要专注于数据库容器化领域,对分布式存 ...

  3. 爬取携程景点评论数据【最新方法】,分析AJAX实现页数跳转的爬取方法

    本文仅供技术学习使用,欢迎转载,转载请注明出处 因为朋友参加数学建模,需要景点数据,而我刚好懂一点点,就帮他写爬虫代码.在网上搜索到一些爬虫方法,但在获取景点ID时,发现现在携程的Request Pa ...

  4. 预告:Intel、Hulu、阿里、京东、携程等大数据实战直播

    前言:由CSDN主办的SDCC 2017之大数据技术实战线上峰会将在CSDN学院举行.作为SD系列技术峰会的一部分,本次线上峰会秉承干货实料(案例)的内容原则,将邀请圈内顶尖的布道师.技术专家和技术引 ...

  5. python aes padding_python笔记43-加解密AES/CBC/pkcs7padding

    前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...

  6. 多业务线亿级体量,携程的账务数据中台实践

    本文为联合撰文,作者团队负责携程集团支付账务系统.消费金融账务系统.清结算和对账等工作的的开发.设计和运维工作. 一 一.前言 原先携程内部的各账务系统都是随着自身的业务发展而建立起来的,其中有些共同 ...

  7. java微信小程序解密AES/CBC/PKCS7Padding

    摘要:微信小程序解密建议使用1.6及以上的环境使用maven下载jar包org.bouncycastlebcprov-jdk15on1.55加密类代码importorg.bouncycastle.jc ...

  8. 携程元旦出游数据:冰雪运动热度升级 张家口酒店一房难求

    1月4日消息,因为国内疫情零星散发,旅游市场是否有受到影响?在刚刚过去的元旦小长假中,旅游市场呈现了这些新趋势. 整体而言,通过比对携程平台用户搜索关键词,机票.火车及酒店预订数据可以发现,今年元旦小 ...

  9. 携程回应大数据杀熟并致歉 二次支付无票是系统Bug

    昨天,有网友在微博上爆料称,携程疑似再次出现"大数据杀熟"现象,理由是自己预订机票,显示总价格17548元,因为发现没有选报销凭证,于是退回去,修正一下.然后,再去支付,就告诉没有 ...

最新文章

  1. Backbone学习日记[1]:感性认识
  2. 《强化学习周刊》第13期:强化学习应用之金融
  3. C/C++左值性精髓(二)哪些表达式是左值,哪些是右值?----右值表达式
  4. linux设置套接字缓冲区的大小
  5. POJ 1741tree-点分治入门
  6. DP--POJ 2241
  7. 这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识
  8. 小程序wafer2操作数据库
  9. R语言如何下载及安装?——R语言安装及环境配置1
  10. Python图像处理库PIL的基本概念介绍(一)
  11. 小胜智能机器人如何和手机联网_当下热门的人工智能电话机器人会革手机的命吗?...
  12. 常威,你还说你不会索引优化?MYSQL索引失效的常见场景与规避方法
  13. 计算机启动灯光提示,开机电脑指示灯红色常亮是怎么回事?
  14. Chapter 9 (Classical Statistical Inference): Binary Hypothesis Testing
  15. 【Vivado那些事儿】VIVADO中时序报告中WNS,WHS,TNS,THS含义
  16. IDEA如何修改背景图片
  17. 一键训练 deeplabv3seg、squeezeseg、voxelnet Docker镜像安装
  18. C++、PHP、Java、Python学哪个好?如何才能少走弯路
  19. uniapp开发App引导页
  20. 一个初中平面几何问题

热门文章

  1. 基础学科如何不再“又难又穷”
  2. 他们提出了一个大胆的猜想:GWT(深度学习)→通用人工智能
  3. 2020年虚拟现实和增强现实的发展趋势将会如何|0glasses低调分享
  4. 《自然》:修复AI神经网络的缺陷
  5. 卷积神经网络为什么能称霸计算机视觉领域?
  6. 2018人工智能前沿报告:深度学习的应用和价值
  7. 科学互驳:大脑细胞活到老,长到老?
  8. 美国科学院学报:如何在竞争激烈的环境下维持稳定的群体
  9. 高盛:人工智能报告中文版(45页)
  10. 开发微信小程序,100 万开发者都离不开它