1、chr()函数

chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。

2、s[a:b:c]

s=(1,2,3,4,5)

1>、 s[a]下标访问s列表内内容

列表下标从0开始,即

s[0]=1

s[1]=2

s[4]=5

s[-1]=5

s[-2]=4

2>、s[a:b]

这是一个左闭右开区间,即

s[0:2]=(1,2)

s[0:3]=(1,2,3)

s[0:-1]=(1, 2, 3, 4)

s[0:-2]=(1,2,3)

3>、s[a:b:c]即s[起始位置:终止位置:步长]

line = "abcde"
line[::-1]
# 结果为:"edcba"
# line[::-1]其实就是反转字符串。
a='python'
b=a[::-1]
print(b) #nohtyp
c=a[::-2]
print(c) #nhy a[i:j:s] #表示:i,j与上面的一样,但s表示步进,缺省为1.
#所以a[i:j:1]相当于a[i:j]
#当s<0时,i缺省时,默认为-1. j缺省时,默认为-len(a)-1
#所以a[::-1]相当于 a[-1:-len(a)-1:-1],也就是从最后一个元素到第一个元素复制一遍,即倒序。

3、匿名函数lambda

#-*- coding:utf-8 -*-
#__author__ = "www.iplaypy.com" # 普通python函数
def func(a,b,c):
return a+b+c print func(1,2,3)
# 返回值为6 # lambda匿名函数
f = lambda a,b,c:a+b+c print f(1,2,3)
# 返回结果为6 '''
f = lambda a,b,c:a+b+c 中的关键字lambda表示匿名函数,
冒号:之前的a,b,c表示它们是这个函数的参数。
匿名函数不需要return来返回值,表达式本身结果就是返回值。
'''

4、Python实现AES加密和解密

这里采用CBC模式:CBC模式对于每个待加密的密码块在加密前会先与前一个密码块的密文异或然后再用加密器加密。第一个明文块与一个叫初始化向量的数据块异或。

更多其它模式见(只有解释,无代码):https://blog.csdn.net/zhchs2012/article/details/79032656

代码(代码参考自:https://www.cnblogs.com/frank-shen/p/10281708.html):

import base64
from Crypto.Cipher import AES
# 密钥(key), 密斯偏移量(iv) CBC模式加密 def AES_Encrypt(key, data):
vi = '0102030405060708' #密钥偏移量
pad = lambda s: s + (16 - len(s)%16) * chr(16 - len(s)%16) #定义一个函数,这个函数的名字pad,这个函数需要一个参数,也就是s。
data = pad(data) #因为CBC模式AES加密需要满足加密数据长度是密钥长度的整数倍,所以如果长度不是整数倍,要加数据
#下面两行就调用函数完成了加密
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
# 加密后得到的是bytes类型的数据
encryptedbytes = cipher.encrypt(data.encode('utf8'))
# 使用Base64进行编码,返回byte字符串
encodestrs = base64.b64encode(encryptedbytes)
# 对byte字符串按utf-8进行解码
enctext = encodestrs.decode('utf8')
return enctext def AES_Decrypt(key, data): #解密过程也就是加密过程的逆过程
vi = '0102030405060708' #密钥偏移量
#转成byte字符串
data = data.encode('utf8')
# 使用base64解码,将加密数据转换位bytes类型数据
encodebytes = base64.decodebytes(data)
#下面两行代码对数据解密操作
cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8'))
text_decrypted = cipher.decrypt(encodebytes)
#因为CBC模式AES加密需要满足加密数据长度是密钥长度的整数倍,所以数据后面可能有不需要的后来添加的数据,所以我们就去掉
#因为添加后缀的时候按照“16 - len(s)%16”,那么后面那个字符的码值也就是原串原来长度差了多少是16整数倍
unpad = lambda s: s[0:-s[-1]]
text_decrypted = unpad(text_decrypted)
text_decrypted = text_decrypted.decode('utf8')
return text_decrypted key = '0CoJUm6Qyw8W8jud'
data = 'sdadsdsdsfd'
AES_Encrypt(key, data)
enctext = AES_Encrypt(key, data)
print(enctext)
text_decrypted = AES_Decrypt(key, enctext)
print(text_decrypted) hBXLrMkpkBpDFsf9xSRGQQ==
sdadsdsdsfd

Python实现AES的CBC模式加密和解密过程详解 和 chr() 函数 和 s[a:b:c] 和函数lambda的更多相关文章

  1. 解决AES算法CBC模式加密字符串后再解密出现乱码问题

    问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...

  2. 通过Jni实现AES的CBC模式加密解密

    AES加密方式基本实现,出现一个问题就是代码的安全性.我们知道java层代码很容易被反编译,很有可能泄漏我们加密方式与密钥 内容,那我们该怎么办呢?我们可以使用c/c++实现加密,编译成So库的形式, ...

  3. https加密解密过程详解

    要点: https协议对传输内容进行加密,具有更强的安全性,防止被抓包后解析出请求内容. https是建立在ssl之上的http协议. 服务器支持https协议必须安装一套数字证书,所谓数字证书就是一 ...

  4. AES采用CBC模式128bit加密工具类

    写在前面 安全测试ECB模式过于简单需要改为CBC模式加密以下为工具类及测试 AESUtils.java package com.sgcc.mobile.utils; import sun.misc. ...

  5. Android DES加密的CBC模式加密解密和ECB模式加密解密

    DES加密共有四种模式:电子密码本模式(ECB).加密分组链接模式(CBC).加密反馈模式(CFB)和输出反馈模式(OFB). CBC模式加密: import java.security.Key; i ...

  6. AES对数据进行加密与解密

    AES对数据进行加密与解密随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即A ...

  7. Java经典设计模式之十一种行为型模式(附实例和详解)

    Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之 ...

  8. Java经典设计模式之七大结构型模式(附实例和详解)

    博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没 ...

  9. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

随机推荐

  1. 剑指offer 面试题9:用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部.pop() -- 从队列首部移 ...

  2. Java多线程-锁的区别与使用

    目录 锁类型 可中断锁 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 Synchronized与Static Synchron ...

  3. ThinkPHP5表单令牌刷新

    制作登录页面的时候,加入了表单令牌,账号和密码输入错误后,再登录的话,会提示表单令牌错误, 这是因为旧的令牌已经过期了,我们要处理下前端的token,修复的办法,在路由文件下加入 //刷新表单令牌,然 ...

  4. python函数1-函数基础

  5. Azure Key Valut 简介

    Azure Key Vault(密钥库)是用于安全地存储和访问Secret的云服务,Secret是需要严格控制访问权限的内容,例如API密钥,密码,证书或加密密钥.Key Vault Service支 ...

  6. innnodb_doublewrite

    有写场景下,双写缓冲确实没必要,例如,你也许像在备库上禁用双写缓冲,此外,一些文件系统,例如zfs做了同样的事,所以,没必要再让innodb做一遍. innodb_double_write=0 即可关 ...

  7. 二十七:XSS跨站之代码及httponly绕过

    httponly:如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还Application 中手动修改 cookie,所以只是在一定 ...

  8. Linux学习安装

    Linux学习安装 服务器指的是网络中能对其他机器提供某些服务的计算机系统,相对普通PC, 服务器指的是高性能计算机,稳定性.安全性要求更高 linux安装学习 1.虚拟机 一台硬件的机器 安装vmw ...

  9. Linux防火墙和iptables

    1. CentOS 查看防火墙状态: systemctl status firewalld firewall-cmd --state 启停防火墙: # 开启 systemctl start firew ...

  10. (09)-Python3之--类的三大特性(封装、继承、多态)

    1.封装 封装,就是只能在类的内部访问,外部访问属性或方法会报异常,python中的封装很简单,只要在属性前或者方法名前加上两个下划线就可以,如self.__name,def __eat(self)这 ...