encryption-method,2019-01-14

1,itsdangerous

from itsdangerous import JSONWebSignatureSerializer

SECRET_KEY = 'abc'

s = JSONWebSignatureSerializer(SECRET_KEY)
encrypt_info = s.dumps({
    'id': 1,
    'name': 'myName',
})
print(encrypt_info)
info = s.loads(encrypt_info)
print(info)

2, sha1 sha224 sha256 sha384 sha512 md5

# 这种加密方式不可逆
#返回info 和 signature,
#本地有key, 使用sha1(info+key) 和signature比较
from hashlib import sha1, sha224, sha256, sha384, sha512
import json
# sha1
info = {
    'id': 1,
    'user': 'Username'
    }
key = 'abc'
signature = sha1((json.dumps(info)+key).encode('utf-8'))
print(signature.hexdigest())
# md5
signature = md5((json.dumps(info)+key).encode('utf-8'))
print(signature.hexdigest())
...

3,AES-128-CBC

#数据采用PKCS#7填充。, 微信小程序开发案例
import base64
import json

from Crypto.Cipher import AES
def _unpad(s):
    return s[:-ord(s[len(s) - 1:])]

appId = 'wx4f4bc4dec97d474b'
sessionKey = 'tiihtNczf5v6AKRyjwEUhQ=='
encryptedData = 'CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew=='
iv = 'r7BXXKkLb8qrSNn05n0qiA=='
# base64处理
sessionKey = base64.b64decode(sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)
cipher = AES.new(sessionKey, AES.MODE_CBC, iv)

decrypted = json.loads(_unpad(cipher.decrypt(encryptedData).decode()))
assert decrypted['watermark']['appid'] == appId
print(decrypted['watermark']['appid'])
print(appId)

4,JWT 加密

'''
JSON Web Token 
header . payload . signature
header : 类型, 算法
payload: 内容
signature: sha256(base64.b64encode('header') + '.' + base64.b64encode('payload'), 'SECRET_KEY')
signature加密后类此: SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc
'''
import base64
from hashlib import sha256
import json
header = {
    'type': 'JWT',
    'alg': 'sha256'
}
payload = {
    'id': 1,
    'user': 'UserName',
    'gender': 'boy',
    'birthday': '1997-12-12'
}
SECRET_KEY = 'abc'
header = base64.b64encode(json.dumps(header).encode('utf-8')).decode()
print(header)
payload = base64.b64encode(json.dumps(payload).encode('utf-8')).decode()
print(payload)
# HS256:   signature = HS256(header + '.' + payload,  SECRET_KEY)
signature = sha256((header + '.' + payload + SECRET_KEY).encode('utf-8'))
print(signature.hexdigest())
JWT = header + '.' + payload + '.' + signature.hexdigest()
print(JWT)

'''
验证时, 解密header得到加密算法,使用本地的SECRET_KEY重新加密 header+'.'+payload, 比较signature
'''

5,RSA 加密

'''
类如支付包对接时, 使用openssl 生成rsa密钥
$ openssl
$ genrsa -out app_private_key.pem 2048  或者 genrsa -out app_private_key.pem 1024
$ rsa -in app_private_key.pem -pubout -out app_public_key.pem
$ exit
本地指定目录保存私钥, 开发平台指定位置上传公钥匙
'''
'''一下本地测试'''
import rsa
import json

(pubkey, privkey) = rsa.newkeys(1024)
print(pubkey.save_pkcs1())
print(privkey.save_pkcs1())

pubkey = pubkey.save_pkcs1()
privkey = privkey.save_pkcs1()
pubkey = rsa.PublicKey.load_pkcs1(pubkey)
privkey = rsa.PrivateKey.load_pkcs1(privkey)
data = {
    'id': 1,
    'user': 'UserName',
    'gender': '男',
}
# 公钥加密, 私钥解密
encryption = rsa.encrypt(json.dumps(data).encode('utf-8'), pubkey)
decryption = rsa.decrypt(encryption, privkey).decode()
print(json.loads(decryption))  # {'gender': '男', 'id': 1, 'user': 'UserName'}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,719评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,337评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,887评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,488评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,313评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,284评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,672评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,346评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,644评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,700评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,457评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,316评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,706评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,261评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,648评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,859评论 2 335

推荐阅读更多精彩内容

  • 数据加密历史上用于最多最广泛的是军事领域,起源最早的是公元前凯撒大帝。早期的加密方式是将数据按照一定规律将字符转化...
    无际天空阅读 620评论 3 2
  • 备注 视频链接看懂了这些知识以后对理解Https和app签名很有用。iOS App 签名的原理 Base64 编码...
    黑化肥发灰阅读 1,955评论 0 51
  • 1. ASCII 编码 ASCII(American Standard Code for Information ...
    s酸菜阅读 8,640评论 0 8
  • 时间渐长,分别的日子已经远的不像昨天,你从我的生活里也已经走出去好远好远,梦里却总能回到那一晚,星光璀璨,河水无澜...
    意莫安阅读 190评论 0 0
  • 如果埃及艳后奥佩特拉的鼻子稍微短些,全球的命运就将改写。 非线性与混沌理论 混沌理论: 一根稻草压垮一头骆驼”,这...
    王增利阅读 167评论 0 0