十进制与二进制
bin(255) #十进制转二进制
'0b11111111'
int("0b11111111",2) #二进制转十进制
255
十进制与十六进制
hex(255) #十进制转十六进制
'0xff'
int("0xff",16) #十六进制转十进制
255
unicode编码
字符和unicode编号是一一对应的关系,世界上的每个字符都对应着一个unicode编号,根据编号可以进行多种编码。utf-8,utf-16,utf-32...,gbk编码等
ord("中")
20013
chr(20013)
'中'
"中".encode("utf-8") #汉字中utf-8编码
b'\xe4\xb8\xad'
"中".encode("gbk") #汉字中 gbk编码
b'\xd6\xd0'
ascii码
sha1系列
from hashlib import sha256
sha256_obj=sha256()#创建sha算法加密对象
sha256_obj.update("加密数据".encode())#参数:内容是要加密数据 二进制格式
sha256_obj.hexdigest()
#结果
'fc016213ebd4e12fd50ebeee2a074d09aef8b4dffa247401227976cfdec1ebf9'
sha256_obj.update("加密数据".encode())#参数:内容是要加密数据 二进制格式
sha256_obj.hexdigest()
##同一个sha对象两次调用update 第二次保留第一次调用的信息
'5cbb02bfa5153ef91d29c8edcd213ffde626a9e6c0ac6d25e1d9ad6ddbca0078'
Base64
function bs4_1(data) {
// 加密
return btoa(data)
}
function bs4_2(data) {
// 解密
return atob(data)
}
后面大概会补==号
MD5
from hashlib import md5
md5_obj=md5()#创建md5算法加密对象
md5_obj.update("加密数据".encode())#参数:内容是要加密数据 二进制格式
md5_obj.hexdigest()
#结果
'648bfc23726d2e76af569f6fea26c1f8'
md5_obj.update("加密数据".encode())
md5_obj.hexdigest()
##同一个md5对象两次调用update 第二次保留第一次调用的信息
'47c58fbd984d00c4c0c24396be4ed52f'
DES加密算法
安装密码库
**windows**: pip install pycryptodomex
**linux**: pip install pycryptodome
DES
Python——加密算法DES_python des加密_羽丶千落的博客-优快云博客
DES3
密钥是16位
AES加密算法
密钥:
填充
nopadding填充方法
不做任何填充但是必须是128位的整被数
zeropadding 填充方法
用0来进行最后的填充
pkcs7padding填充方法
要求铭文为16字节的整被数,缺几个就在后面补数字几
模式
ECB 模式
CBC模式
CFB模式
(密文反馈:Cipher feedback)**
与ECB和CBC模式只能够加密块数据不同,CFB能够将块密文(Block Cipher)转换为流密文(Stream Cipher)。
OFB模式
**4.(输出反馈:Output feedback)**
OFB是先用块加密器生成密钥流(Keystream),然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。
主要特征:
iv :初始向量
mode:工作模式
padding :填充方式
RSA加密
python中的RSA加密与解密_python rsa_我是个假程序员的博客-优快云博客
控制流平坦化
1简单的操作
AST语法树
加密网站:JavaScript Obfuscator Tool
查看代码结构网站:AST explorer
古典加密
栏栅栏密码解法
一般比较常见的是2栏的栅栏密码。
比如明文:THERE IS A CIPHER
去掉空格后变为:THEREISACIPHER
两个一组,得到:TH ER EI SA CI PH ER
先取出第一个字母:TEESCPE
再取出第二个字母:HRIAIHR
连在一起就是:TEESCPEHRIAIHR
还原为所需密码。
而解密的时候,我们先把密文从中间分开,变为两行:
T E E S C P E
H R I A I H R
再按上下上下的顺序组合起来:
THEREISACIPHER
分出空格,就可以得到原文了:
THERE IS A CIPHER
列移位加密
奇奇怪怪的古典密码_citytwilight的博客-优快云博客
列移位密码(Columnar Transposition Cipher)是一种比较简单,易于实现的换位密码,通过一个简单的规则将明文打乱混合成密文。下面给出一个例子。
我们以明文 The quick brown fox jumps over the lazy dog,密钥 how are u 为例:
将明文填入 5 行 7 列表(事先约定填充的行列数,如果明文不能填充完表格可以约定使用某个字母进行填充)
密钥: how are u,按 how are u 在字母表中的出现的先后顺序进行编号,我们就有 a 为 1,e 为 2,h 为 3,o 为 4,r 为 5,u 为 6,w 为 7,所以先写出 a 列,其次 e 列,以此类推写出的结果便是密文:
密文: qoury inpho Tkool hbxva uwmtd cfseg erjez
工具
http://www.practicalcryptography.com/ciphers/classical-era/columnar-transposition/ 行列数相等
凯撒密码:
【加密算法】凯撒密码的原理及Python实现_凯撒密码加密算法python_一个甜甜的大橙子的博客-优快云博客
原理
通常加密和解密互为逆过程,我们知道如何加密,那么解密的方法也就清晰了,对于凯撒密码,只要我们知道“移位”的值k,那么就能对密文进行解密。
简化问题,我们做如下假设:
只考虑小写英文字母
‘a’ = 0 ‘b’ = 1 ‘c’ = 2 … ‘z’ = 25
其中,word代表被加密字母,encrypt()代表加密函数,k代表移位值,那么加密过程的数学公式为:
encrypt(word) = (word + k) mod 26
解密过程的数学公式为:
decrypt(word) = (word - k) mod 26