pythonaes加密
㈠ “JS 逆向 AES逆向加密”python爬虫实战,日子越来越有判头了
大家好,我是辣条。
一个建筑行业的堂哥为了搞一些商业数据前前后后花了1w,辣条我半个小时就能解决的事情,这就是技术的魅力【爬取是的公开数据!】
网址:监管平台
开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests,AES,json
进去h里面 (鼠标光标放到 h上面 会显示他的 js地址 如果没有显示 就是证明你还没有执行到这里 需要在前面打上断点 刷新页面调试)
发现这个采用AES加密算法 使用模型CBC模式 采用填充方式为 Pkcs7
证明数据推导正确 在 return r.toString() 打上断点
r里面数据正常返回
㈡ python 利用Crypto进行ECB 加密
windows下使用AES时安装pycryptodome 模块,pip install pycryptodome
linux 下使用AES时安装pycrypto模块,pip install pycrypto
```
from Crypto.Cipherimport AES
from binasciiimport b2a_hex, a2b_hex
from Cryptoimport Random
import base64
import json
class AesEncry(object):
# aes秘钥 ,可根据自身需要手动生成
宴旁 key ="aes_keysaes_keysaes_keys"
def encrypt(self, data):
data = json.mps(data)
mode = AES.MODE_ECB
padding =lambda s: s + (16 -len(s) %16) *chr(16 -len(s) %16)
cryptos = AES.new(self.key.encode("utf-8"), mode)
cipher_text = cryptos.encrypt(padding(data).encode("utf-8"))
return base64.b64encode(cipher_text).decode("utf-8")
def decrypt(self, data):
cryptos = AES.new(self.key.encode("型祥握utf-8"), AES.MODE_ECB)
decrpytBytes = base64.b64decode(data)
卜庆 meg = cryptos.decrypt(decrpytBytes).decode('utf-8')
return meg[:-ord(meg[-1])]
aes_encry_util = AesEncry()
#明文
data ="mypwd_test"
#加密
encry_data = aes_encry_util.encrypt(data)
print(encry_data)
# 对密文进行解密
decry_data = aes_encry_util.decrypt(encry_data)
print(decry_data)
```
如上便完成了利用python进行AES的ECB加密
㈢ 如何使用Python进行Rijndael方式的加密解密
Rijndael,在高级加密标准(AES)中使用的基本密码算法。
概述 (美国)国家标准技术研究所(NIST)选择Rijndael作为美国政府加密标准(AES)的加密算法,AES取代早期的数据加密标准(DES)。Rijndael由比利时计算机科学家Vincent Rijmen和Joan Daemen开发,它可以使用128位,192位或者256位的密钥长度,使得它比56位的DES更健壮可靠。Rijndael也有一个非常小的版本(52位),合适用在蜂窝电话、个人数字处理器(PDA)和其他的小设备上。
近似读音:Rijn [rain] dael [del] (莱恩戴尔) Rijn 来源 Rhine [莱茵河]的荷兰语(Dutch)发音。
dael 是常用的人名 这词是两个科学家的名字各出一段拼成的。
Rijndael.h
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#pragma once
#include <exception>
#include <string.h>
using namespace std;
class CRijndael
{
public:
enum { ECB=0, CBC=1, CFB=2 };
private:
enum { DEFAULT_BLOCK_SIZE=16 };
enum { MAX_BLOCK_SIZE=32, MAX_ROUNDS=14, MAX_KC=8, MAX_BC=8 };
static int Mul(int a, int b)
{
return (a != 0 && b != 0) ? sm_alog[(sm_log[a & 0xFF] + sm_log[b & 0xFF]) % 255] : 0;
}
static int Mul4(int a, char b[])
{
if(a == 0)
return 0;
a = sm_log[a & 0xFF];
int a0 = (b[0] != 0) ? sm_alog[(a + sm_log[b[0] & 0xFF]) % 255] & 0xFF : 0;
int a1 = (b[1] != 0) ? sm_alog[(a + sm_log[b[1] & 0xFF]) % 255] & 0xFF : 0;
int a2 = (b[2] != 0) ? sm_alog[(a + sm_log[b[2] & 0xFF]) % 255] & 0xFF : 0;
int a3 = (b[3] != 0) ? sm_alog[(a + sm_log[b[3] & 0xFF]) % 255] & 0xFF : 0;
return a0 << 24 | a1 << 16 | a2 << 8 | a3;
}
public:
CRijndael();
virtual ~CRijndael();
void MakeKey(char const* key, char const* chain,
int keylength=DEFAULT_BLOCK_SIZE, int blockSize=DEFAULT_BLOCK_SIZE);
private:
void Xor(char* buff, char const* chain)
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
for(int i=0; i<m_blockSize; i++)
*(buff++) ^= *(chain++);
}
void DefEncryptBlock(char const* in, char* result);
void DefDecryptBlock(char const* in, char* result);
public:
void EncryptBlock(char const* in, char* result);
void DecryptBlock(char const* in, char* result);
void Encrypt(char const* in, char* result, size_t n, int iMode=ECB);
void Decrypt(char const* in, char* result, size_t n, int iMode=ECB);
int GetKeyLength()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_keylength;
}
int GetBlockSize()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_blockSize;
}
int GetRounds()
{
if(false==m_bKeyInit)
throw exception(sm_szErrorMsg1);
return m_iROUNDS;
}
void ResetChain()
{
memcpy(m_chain, m_chain0, m_blockSize);
}
public:
static char const* sm_chain0;
private:
static const int sm_alog[256];
static const int sm_log[256];
static const char sm_S[256];
static const char sm_Si[256];
static const int sm_T1[256];
static const int sm_T2[256];
static const int sm_T3[256];
static const int sm_T4[256];
static const int sm_T5[256];
static const int sm_T6[256];
static const int sm_T7[256];
static const int sm_T8[256];
static const int sm_U1[256];
static const int sm_U2[256];
static const int sm_U3[256];
static const int sm_U4[256];
static const char sm_rcon[30];
static const int sm_shifts[3][4][2];
static char const* sm_szErrorMsg1;
static char const* sm_szErrorMsg2;
bool m_bKeyInit;
int m_Ke[MAX_ROUNDS+1][MAX_BC];
int m_Kd[MAX_ROUNDS+1][MAX_BC];
int m_keylength;
int m_blockSize;
int m_iROUNDS;
char m_chain0[MAX_BLOCK_SIZE];
char m_chain[MAX_BLOCK_SIZE];
int tk[MAX_KC];
int a[MAX_BC];
int t[MAX_BC];
};
㈣ python中AES 用ECB模式加密之后为什么和C#加密之后的结果不一样
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。 AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集
㈤ python 中 crypto 的aes加密怎么使用
在刚开始知道这个模块的时候,连基本的Crypto模块的安装都花了很多很多时间来搞,也不知道什么情况反正是折腾很久了才安装起的,记得是包安装起来了,但使用的时候始终提示找不到Crypto.Cipher模块。然后怎么解决的呢?
一、把我的python换成了64位的,本来电脑就是64位的也不知道之前是啥情况安装成32位的了。(O(∩_∩)O哈哈~)
二、安装了VCForPython27.msi
三、在cmd中执行:
pip install pycrypto -i http://mirrors.aliyun.com/pypi/simple/1
经过上边儿的几个步骤,我是能够成功执行
from Crypto.Cipher import AES1
现在上一个实例代码:
# !/usr/bin/env python
# coding: utf-8
'''
'''
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
class MyCrypt():
def __init__(self, key):
self.key = key
self.mode = AES.MODE_CBC
def myencrypt(self, text):
length = 16
count = len(text)
print count
if count < length:
add = length - count
text= text + ('\0' * add)
elif count > length:
add = (length -(count % length))
text= text + ('\0' * add)
# print len(text)
cryptor = AES.new(self.key, self.mode, b'0000000000000000')
self.ciphertext = cryptor.encrypt(text)
return b2a_hex(self.ciphertext)
def mydecrypt(self, text):
cryptor = AES.new(self.key, self.mode, b'0000000000000000')
plain_text = cryptor.decrypt(a2b_hex(text))
return plain_text.rstrip('\0')
if __name__ == '__main__':
mycrypt = MyCrypt('abcdefghjklmnopq')
e = mycrypt.myencrypt('hello,world!')
d = mycrypt.mydecrypt(e)
print e
print d
0414243
在cmd中执行结果:
㈥ python文本加密是什么
python文本加密是Python 提供了诸如 hashlib,base64 等便于使用的加密库,我们可以借助异或操作,实现一个简单的文件加密程序。
通过了解异或操作的性质,加密原理就非常清晰了。
首先将文件转换成二进制数,再生成与该二进制数等长的随机密钥,将二进制数与密钥进行异或操作,得到加密后的二进制数。
将加密后的二进制程序与密钥进行异或操作,就得到原二进制数,最后将原二进制数恢复成文本文件。
相关拓展
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容。
加密之所以安全,绝非因不知道加密解密算法方法,而是加密的密钥是绝对的隐藏,流行的RSA和AES加密算法都是完全公开的,一方取得已加密的数据,就算知道加密算法也好,若没有加密的密钥,也不能打开被加密保护的信息。
单单隐蔽加密算法以保护信息,在学界和业界已有相当讨论,一般认为是不够安全的。公开的加密算法是给黑客和加密家长年累月攻击测试,对比隐蔽的加密算法要安全得多。
尽管加密或为了安全目的对信息解码这个概念十分简单,但在这里仍需对其进行解释。数据加密的基本过程包括对称为明文的原来可读信息进行翻译,译成称为密文或密码的代码形式。该过程的逆过程为解密,即将该编码信息转化为其原来的形式的过程。
以上内容参考 网络-加密
㈦ python3 安装Crypto.Cipher import AES
问题背景:
m3u8文件加密时,使用“from Crypto.Cipher import AES”相关函败乎数解密:
#EXT-X-KEY 记录了加密的方式,一般是AES-128以及加密的KEY信息
出现问题:
from Crypto.Cipher import AES
pip install Crypto
出错
解决办法:
安装crypto库(首字母c是小写)
pip install crypto
进入python的库管理位置,site-packages文件夹,找到crypto,将其首字母c改为大写
判断是否解决的方式:
from Crypto.Cipher import AES
不会报错,说明成功。
备注:
如果在C:\Python36\Lib\site-packages\Crypto目录下没有找到:\Cipher目录。
可以尝试安装pycryptodome库察氏悉 或 pycrypto库:
pip install pycryptodome
pip install pycrypto (安装这个库,基本会失败核迹,会报错)
㈧ Python问题,AES加密,当需要加密的字符串不足16位时,试编写代码用空格来补充位置
Python问题,AES加密,当需要加密的字符串不足
㈨ python3.6 AES 加密解密
本来以为这是个比较简单的东袜野西者梁,网上一搜一大把。搜索结告嫌喊果气的我自己看文档写了一个。
首先安装pycryptodome或者pycryptodomex 用pip 安装,安装之后需要修改包名crypto改为Crypto
我是采用ECB模式加密你也可以用其他模式加密,模式区别可以看这篇 https://www.cnblogs.com/liangxuehui/p/4651351.html 。
秘钥加密解密需要统一。
㈩ Python进行 AES CBC-128bit PKCS7/PKCS5 填充加密解密
你看一下这个例子吧。可以参考下面的地址:前面加上http,把句号改成点。
likang。me/blog/2013/06/05/python-pycrypto-aes-ecb-pkcs-5/
#-*-coding:utf-8-*-
fromCrypto.CipherimportAES
importos
BS=AES.block_size
pad=lambdas:s+(BS-len(s)%BS)*chr(BS-len(s)%BS)
unpad=lambdas:s[0:-ord(s[-1])]
key=os.urandom(16)#thelengthcanbe(16,24,32)
text='tobeencrypted'
cipher=AES.new(key)
encrypted=cipher.encrypt(pad(text)).encode('hex')
printencrypted#willbesomethinglike''
decrypted=unpad(cipher.decrypt(encrypted.decode('hex')))
printdecrypted#willbe'tobeencrypted'