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库-加解密相关推荐

  1. RC4 调用Java库加解密

    RC4特点:对称加密,安全度高,按字节加密. 密钥长度:128可保证安全性 1.加密 public byte[] encryptWithRC4(String content, String key) ...

  2. python库-加解密库PyCryptodome(之前的pycrypto)

    文章目录 python库-加解密库PyCryptodome 什么是pycrypto 什么是PyCryptodome 安装PyCryptodome demo 参考 python库-加解密库PyCrypt ...

  3. 趣学python3(10)-函数注释方法

    函数注释方法(Python3.5中引入). def add(x1:str,x2:str)->str:return x1 + x2 print(add(15,32)) print(add('abc ...

  4. 趣学python3(46)--求素数

    import time import math start=time.perf_counter() print("2") for n in range(3,101): for i ...

  5. 趣学python3(40)--TCP服务器和客户端(socketserver类)

    #!/usr/bin/env python3import socket import sysHOST="localhost" PORT=21200 ADDR=(HOST,PORT) ...

  6. 趣学python3(35)-Newton迭代法解一元方程

    牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法. 正割法避 ...

  7. 趣学python3(32)-enumerate,zip

    返回枚举对象.iterable必须是序列.迭代器或其他支持迭代的对象.enumerate()返回的迭代器的 next() 方法返回一个元组,该元组包含一个计数(从开始时默认为0)和在iterable上 ...

  8. 趣学python3(30)-字典

    s1={"名字":"张三","年龄":"25","特长":["绘画"," ...

  9. 趣学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( ...

最新文章

  1. 科普丨莫拉维克悖论(人工智能中最重要的发现之一)
  2. GitHub免费提供机器学习扫描代码漏洞,现已支持JavaScript/TypeScript
  3. BAT教程 第三节(FOR命令中的变量)
  4. json mysql乱码问题_JSON数据乱码问题
  5. Opportunity text creation tool
  6. javabean 学习笔记
  7. 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
  8. Irrlicht引擎例子说明及中文链接
  9. 游戏必备组件有哪些_微信广告将升级小程序、小游戏开发者收入方案
  10. 受限用户如何禁用迈克菲等开机自动启动软件?
  11. php ip纯真数据库Dat,php读取纯真ip数据库使用示例
  12. java calendar星期几_正确获取星期几(Calendar.DAY_OF_WEEK)
  13. Industry工业软件开发平台设计A-1
  14. Kubernetes的Startup, Liveness, Readiness深入探索
  15. 虚拟模拟器可以用服务器,云服务器可以用什么模拟器
  16. Mach-O文件, 架构包framework的合并和拆分
  17. 错误排查:packet_write_wait: Connection to XXX XXX XXX XXX port 22: Broken pipe
  18. 【转】Android开发人员不得不收集的代码(不断更新)
  19. 如何旋转PDF文件页面,一分钟教你学会
  20. 安卓应用加固壳判断java厂商_Android APK加固(加壳)工具

热门文章

  1. Struts2的自动装配
  2. 数字证书格式详细说明【转】
  3. 请求接口获取到的数据其中出现null值,处理的时候导致了程序crash,解决方案如下:...
  4. 介绍 Java 的内存泄漏
  5. ASP.NET MVC3 上传头像图片并截图
  6. 关于JavaScript中Function Declaration与Function Expression的进一步说明
  7. Flex4与WebService通信
  8. CATALAN数 学习
  9. 【Noip模拟By yxj】
  10. oracle 回车、换行符