趣学python3(45)--调用C库-加解密
cryptography库既包括高级规则,也包括普通密码算法(如对称密码、消息摘要和关键派生函数)的低级接口。
$ pip install cryptography
例如,用密码学的高层对称加密方式加密:
from cryptography.fernet import Fernet
key = Fernet.generate_key()
f = Fernet(key)
token = f.encrypt(b"hello,world!")
print token
print key
'...'
print f.decrypt(token)
gAAAAABbzaV91tfQiIYclT05Kb30uA6-XDKsp13jHx7lpIvML3NHCtJCxqTIgArIqQgTocnsBanR51vDkeh5NcDkN_B2kL2bDA==
tbpwFLqSZFa6Tufae7JW5gqrxGPQFtRCrfl-gyDIuiw=
hello,world!
AES :
import osfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modesfrom cryptography.hazmat.backends import default_backendfrom cryptography.hazmat.primitives import paddingpadder = padding.PKCS7(128).padder()backend = default_backend()key = os.urandom(32)iv = os.urandom(16)cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)encryptor = cipher.encryptor()
padded_data = padder.update(b"liuxing")
padded_data += padder.finalize()
print padded_data
ct = encryptor.update(padded_data) + encryptor.finalize()
decryptor = cipher.decryptor()
decryptorData=decryptor.update(ct) + decryptor.finalize()
unpadder = padding.PKCS7(128).unpadder()
data = unpadder.update(decryptorData)
data + unpadder.finalize()
liuxing
Out[22]:‘liuxing’
#!/usr/bin/env python2# -*- coding: utf-8 -*-import osfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modesfrom cryptography.hazmat.backends import default_backendfrom cryptography.hazmat.primitives import paddingpadder = padding.PKCS7(128).padder()backend = default_backend()key = os.urandom(32)iv = os.urandom(16)cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)encryptor = cipher.encryptor()messages = raw_input("Please input your message: ")padded_data = padder.update(messages )padded_data += padder.finalize()print padded_datact = encryptor.update(padded_data) + encryptor.finalize()decryptor = cipher.decryptor()decryptorData=decryptor.update(ct) + decryptor.finalize()unpadder = padding.PKCS7(128).unpadder()data = unpadder.update(decryptorData)data + unpadder.finalize()
Please input your message: hello, world,I am a teacher.
hello, world,I am a teacher.
Out[24]:
‘hello, world,I am a teacher.’
python3:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
padder = padding.PKCS7(128).padder()
backend = default_backend()
key = os.urandom(32)
iv = os.urandom(16)
cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=backend)
encryptor = cipher.encryptor()
messages = input("Please input your message: ")
messages=bytes(messages,"utf-8")
padded_data = padder.update(messages )
padded_data += padder.finalize()
print(padded_data)
ct = encryptor.update(padded_data) + encryptor.finalize()
decryptor = cipher.decryptor()
decryptorData=decryptor.update(ct) + decryptor.finalize()
unpadder = padding.PKCS7(128).unpadder()
data = unpadder.update(decryptorData)
print(data + unpadder.finalize())
趣学python3(45)--调用C库-加解密相关推荐
- RC4 调用Java库加解密
RC4特点:对称加密,安全度高,按字节加密. 密钥长度:128可保证安全性 1.加密 public byte[] encryptWithRC4(String content, String key) ...
- python库-加解密库PyCryptodome(之前的pycrypto)
文章目录 python库-加解密库PyCryptodome 什么是pycrypto 什么是PyCryptodome 安装PyCryptodome demo 参考 python库-加解密库PyCrypt ...
- 趣学python3(10)-函数注释方法
函数注释方法(Python3.5中引入). def add(x1:str,x2:str)->str:return x1 + x2 print(add(15,32)) print(add('abc ...
- 趣学python3(46)--求素数
import time import math start=time.perf_counter() print("2") for n in range(3,101): for i ...
- 趣学python3(40)--TCP服务器和客户端(socketserver类)
#!/usr/bin/env python3import socket import sysHOST="localhost" PORT=21200 ADDR=(HOST,PORT) ...
- 趣学python3(35)-Newton迭代法解一元方程
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. 正割法避 ...
- 趣学python3(32)-enumerate,zip
返回枚举对象.iterable必须是序列.迭代器或其他支持迭代的对象.enumerate()返回的迭代器的 next() 方法返回一个元组,该元组包含一个计数(从开始时默认为0)和在iterable上 ...
- 趣学python3(30)-字典
s1={"名字":"张三","年龄":"25","特长":["绘画"," ...
- 趣学python3(29)-集合set
mysets=set([]) mynums=[11,12,13,11,12,13] y=set([11,13,18]) for num in mynums:mysets.add(num) print( ...
最新文章
- 科普丨莫拉维克悖论(人工智能中最重要的发现之一)
- GitHub免费提供机器学习扫描代码漏洞,现已支持JavaScript/TypeScript
- BAT教程 第三节(FOR命令中的变量)
- json mysql乱码问题_JSON数据乱码问题
- Opportunity text creation tool
- javabean 学习笔记
- 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
- Irrlicht引擎例子说明及中文链接
- 游戏必备组件有哪些_微信广告将升级小程序、小游戏开发者收入方案
- 受限用户如何禁用迈克菲等开机自动启动软件?
- php ip纯真数据库Dat,php读取纯真ip数据库使用示例
- java calendar星期几_正确获取星期几(Calendar.DAY_OF_WEEK)
- Industry工业软件开发平台设计A-1
- Kubernetes的Startup, Liveness, Readiness深入探索
- 虚拟模拟器可以用服务器,云服务器可以用什么模拟器
- Mach-O文件, 架构包framework的合并和拆分
- 错误排查:packet_write_wait: Connection to XXX XXX XXX XXX port 22: Broken pipe
- 【转】Android开发人员不得不收集的代码(不断更新)
- 如何旋转PDF文件页面,一分钟教你学会
- 安卓应用加固壳判断java厂商_Android APK加固(加壳)工具