手机号的 AES/CBC/PKCS7Padding 加解密
前言:接口中上次的手机号码和密码是传入的加密的,模拟自动化的时候也需要先对数据进行加密
- 1.各种语言实现
- 2.python实现时踩的坑
代码操作
# coding=utf-8 import hashlib
from Crypto.Cipher import AES
import base64 class AesCrypter(object):
def __init__(self):
self.key = b'********'
self.iv = b'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0' def encrypt(self, data):
data1 = self.pkcs7padding(data)
data = bytes(data1, encoding="utf8") # 传进来的参数先变成字节
h_key = hashlib.sha256(self.key).digest()
cipher = AES.new(h_key, AES.MODE_CBC, self.iv)
encrypted = cipher.encrypt(data)
return base64.b64encode(encrypted) def decrypt(self, data):
data = base64.b64decode(data)
h_key = hashlib.sha256(self.key).digest()
cipher = AES.new(h_key, AES.MODE_CBC, self.iv)
decrypted = cipher.decrypt(data)
decrypted = self.pkcs7unpadding(decrypted)
return decrypted def pkcs7padding(self, data):
# AES.block_size 16位
bs = AES.block_size
padding = bs - len(data) % bs # 16-11%16
padding_text = chr(padding) * padding # chr()返回当前正是对应的ascii码
return data + padding_text def pkcs7unpadding(self, data):
lengt = len(data)
unpadding = data[lengt - 1]
return data[0:lengt - unpadding] def sha(self, text):
# key进行256哈希
sha256 = hashlib.sha256()
sha256.update(text.encode('utf-8'))
res = sha256.hexdigest()
return res if __name__ == '__main__':
aes = AesCrypter()
encrypted = aes.encrypt('') # 加密
print(encrypted)
plain = aes.decrypt(encrypted) # 解密
print(plain)
运行后的结果

手机号的 AES/CBC/PKCS7Padding 加解密的更多相关文章
- Java 使用AES/CBC/PKCS7Padding 加解密字符串
介于java 不支持PKCS7Padding,只支持PKCS5Padding 但是PKCS7Padding 和 PKCS5Padding 没有什么区别要实现在java端用PKCS7Padding填充, ...
- AES CBC/CTR 加解密原理
So, lets look at how CBC works first. The following picture shows the encryption when using CBC (in ...
- JAVA AES CBC PKCS5Padding加解密
package com.hzxc.groupactivity.util; /** * Created by hdwang on 2019/1/17. */ import org.slf4j.Logge ...
- C++ 和 java 使用 AES CBC 128 加解密
Java 使用jce, code: import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax ...
- openssl:AES CBC PKCS5 加解密 (C/GOLANG)
#include <openssl/aes.h> /* AES_CBC_PKCS5_Encrypt * 入参: * src:明文 * srcLen:明文长度 * key:密钥 长度只能是1 ...
- python 实现 AES CBC模式加解密
AES加密方式有五种:ECB, CBC, CTR, CFB, OFB 从安全性角度推荐CBC加密方法,本文介绍了CBC,ECB两种加密方法的python实现 python 在 Windows下使用AE ...
- python笔记43-加解密AES/CBC/pkcs7padding
前言 有些公司对接口的安全要求比较高,传参数的时候,不会明文的传输,先对接口加密,返回的数据也加密返回. 目前比较常见的加密方式是AES/CBC/pkcs7padding. AES五种加密模式 在AE ...
- java 小程序开发PKCS7Padding 解密方法实现,以及错误Cannot find any provider supporting AES/CBC/PKCS7Padding 解决办法
近日在对接小程序API,其中wx.getUserInfo api返回的数据encryptedData 的解密算法要求为: AES-128-CBC,数据采用PKCS#7填充. 经过一番查询,得到java ...
- java微信小程序解密AES/CBC/PKCS7Padding
摘要:微信小程序解密建议使用1.6及以上的环境使用maven下载jar包org.bouncycastlebcprov-jdk15on1.55加密类代码importorg.bouncycastle.jc ...
随机推荐
- 57 ORM多表查询
多表查询from django.db import models# Create your models here. class Author(models.Model): nid = models. ...
- 漏洞复现——tomcat远程代码执行漏洞
漏洞描述: 当存在该漏洞的Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT请求方法,攻击者可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行 影响范 ...
- shiro会话管理
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理.会话事件监听.会话存储/持久化.容器无关的集群. ...
- getopt实现传参自动识别
test.py #!/usr/bin/env python # -*- coding: utf-8 -*- import getopt import sys #-h-f-v为了下面的识别 opts,a ...
- 【Java】【5】List随机取值
//shuffle 打乱顺序 Collections.shuffle(list); //随机抽取1个值 System.out.println(list.get(0)); //随机抽取N个值 Syste ...
- Highcharts 环境配置
Highcharts 环境配置 本章节我们将为大家介绍如何在网页中使用 Highcharts. Highcharts 依赖于 jQuery,所以在加载 Highcharts 前必须先加载 jQuery ...
- laravel响应的发送和程序终止
响应的发送是通过index.php中的$response->send();实现的 vendor\symfony\http-foundation\Response.php public funct ...
- 13. Roman to Integer C++
直接for循环,并且判断是否出现IV等情况 int which(char ch) { if(ch == 'I') ; else if(ch == 'V') ; else if(ch == 'X') ; ...
- org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'list' in 'c
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'list' in ' ...
- AWVS和AppScan使用代理进行扫描教程
一.说明 扫描网站时,一是可能某些网站网络不能直接访问,二是可能不想曝露本机IP.这时要进行处理. 第一个方法是如果有vpn直接登vpn,vpn的话由于是直接修改操作系统层次的网络,扫描器不需要额外做 ...