2018年7月21日python中的加密和解密

·在函数调用执行过程中: 如果出现return,return中的函数执行完则本函数就运行结束,return下面的语句不会再继续执行,所以return使 用时也应该注意,如果是调用函数的下面还有要输出的东西,可以不用写return,直接写函数名调用

·在函数中的最后如果有返回值return True,他的位置一定要注意,不要放在for循环里面,否则循环只能执行1次, 要和for循环在同一个竖线上。

·字母的变大upper(),变小lower(),和加密encrypt(src)都不能放在开头,会报错,可以放在中间要么就另起一行 重新赋值

********************************************** ·编码:将计算机中的字符串按照一定的顺序表示成二进制数据的过程

· 二进制:0/1   每一个二进制数字,表示一位,通常计算机中:0000 0001 字节:        8位二进制数据表示一个字节: 0000 0001->1个字节 字符:        2个字节->1个字符;通常情况下我们使用的字符串~就是使用字符编码的!

·各种计算机编码方式的历史: 计算机-> 表示[英文字母、数字、部分特殊符号]-> 最初是ascii编码[0~256] A:65  a:97 周边国家-> 表示[英文字母、数字、特殊符号、其他相似语言]-> ANSI 最后使用国家扩展-> 为了要表示更多的语言和数据-> 扩展了ANSI编码 天朝-> 引入计算机-> 表示汉字-> 国家标准编码 -> GB2312-> GBK -> GB18030

 ·一般的编码方式都是: 一个字节表示一个英文字母、数字、特殊符号等等 两个字节表示一个汉字-> 字符(两个字节)

·UTF-8的由来: 最后推出了一种新编码:万国码,统一字符编码[号称可以统一全球范围内任何语言的表示方式] 任何语言中的任何数据,都可以使用一个字符来表示,也就是unicode编码 互联网开始兴起->网络上传输数据!数据信息开始共享,数据->在网线上传递->电流[数据包] 必须按照按照固定的编码进行传输,接收方按照固定的编码进行解码才能得到正确数据 这是数据传输编码:unicode transfer format 8 bit [UTF-8]

·python中,怎么完成字符串的编码和解码? 要命的规则:字符串的编码解码,一直都是任何语言中一个难点和重点 任何字符串->都是由字节组成的!

python3中:字符:(str);字节(bytes) 字符->字节:encode 编码:将一个字符串编码成计算机可以操作的二进制数据 字节->字符:decode 解码:将一个二进制数据按照指定的编码~解码成自然数据

s = “大天朝”            s:<class ‘str’> x = s.encode(“utf-8”)   x:<class ‘bytes’> x-> b’\xb9\x00\xa5..’

x2 = x.decode(“utf-8”)  x2:<class ‘str’> x2 -> “大天朝”

*************************************** ·字符串的替换操作: 简单替换:使用最多的操作方式:replace S.replace(old, new [, count])     S:表示用户自己定义的一个字符串     old:第一个参数:用来查询的需要被替换的字符串     new:第二个参数:用来替换查询到的数据的字符串     count:文档中如果有方括号[]表示可选,可以有也可以没有,表示替换的个数     count不规定的情况下就是默认情况全部替换,如果指定了count是指从头开始替换的旧数据的个数

s = “hello world” x = s.replace(‘l’, ‘*’) x-> “he**o wor*d” s-> “hello world”     因为s是字符串,属于基本数据类型,所以s本来的值是不变的

复杂的替换: s1=“abcdefg”            #先定义对应替换的关系 s2=“HIGKLMN” s=str.maketrans(s1,s2)    #再定义一个映射 x="guojia"                #给出一个将要替换的字符串 s3=x.translate(s)         #以映射关系s对字符串x进行替换

**************************************************** ·加密解密操作: 加密又分为单向加密和双向加密,单向加密后的密文无法还原,双向加密后的密文可以还原,, 单向加密中最常用的是MD5和sha,双向加密又分为对称加密和非对称加密 加密:将一个明文数据,按照指定的算法,运算得到一个其他的可以隐藏真实信息的密文数据, 这个过程称为加密;处理的算法称为加密算法;用到的关键数据称为密钥 解密:按照指定的算法和关键数据,将一个密文数据进行逆向运算得到正确的明文数据的过程成为解密操作

·python中的加密操作: hashlib是一个拥有多种加密算法的单向加密模块,如果想要查看里面都有哪些加密算法,需要先用import引用这个模块 然后用dir(hashlib)查看里面所有的加密算法,如md5和sha

单向加密算法有两种: 只能加密,不能解密的算法 如:用户账号密码(单向加密)存储,此时任何人都不能查看该用户的明文密码 流程->用户输入明文密码->加密->和存储的密文密码进行比较->相等-成功 1.单向散列加密算法-> MD5加密     #是一个比较经典的加密算法,又称为数据的数字指纹(一般大型软件都会提供一个 2.单向哈希加密算法-> SHAX加密         #MD5值,当软件下载完成之后和提供的MD5值对照一个,如果一样就没问题,                                         #如果不一样就说明你丢数据了

#单项散列加密算法使用之前必须要先用import引用hashlib模块 ·单向散列算法的操作步骤: 获取明文数据            s = “hello” 明文数据转换成字节数据        s = s.encode(“utf-8”) 进行加密处理             x = hashlib.md5(s) 进行盐值混淆            x.update("^#@JDDf".encode("utf-8"))    得到密文数据            x.hexdigest()   #得到最后的加密数据                 ……                ->‘ba65a656f6b12312ab12d23’    加密过程不可逆!  #盐值混淆的目的是加入不同的盐值使相同的密码得到不同的密文,更加安全  #md5的密文数据是一个十六进制的字符串,无论原数据多少,加密后的密文长度固定

·单向哈希算法的操作步骤: 获取明文数据            s = “hello” 明文数据转换成字节数据        s = s.encode(“utf-8”) 进行加密处理             x = hashlib.sha224(s) 得到密文数据            x.hexdigest()                          ……                ->‘ba65a656f6b12312ab12d23’    加密过程不可逆                                                    #sha有很多类型,不同类型得到的密文长度不一样但是使用同一种sha加密数据,无论数据多大加 密出来的密文长度一样,sha后边的数字是象征着加 密后的密文长度,数字越大,加密出来的密文长度越长

·出错类型: AttributeError: '_hashlib.HASH' object has no attribute 'hesdigest' 归属问题,一般都是打错字母导致,说的是输入的"hesdigest"这个东西并不不属于前面那个模块

************************************************ ·双向加密算法: 可以加密,加密的数据可以解密得到明文数据 使用在更多的场景;数据进行加密传输->目标地址->解密得到明文数据进行处理,双向加密又分为对称加密和非对称加密 对称加密:加密和解密使用相同的秘钥; 非对称加密:加密和解密使用不同的秘钥;如HTTPS传输数据

·Base64是python内置的一个双向的对称加密中的编码解码,一般不说用于加密,更多的是说编码解码(base64也称为python内置的一个标准库): 文档中如果有(standand library)是python内置的标准库,可以直接使用 如果想要查看Base64模块中的函数,必须要先用import引用这个模块才能用dir查看 Base64是一种用64个字符来表示任意二进制数据的方法。 用记事本打开exe、jpg、pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多文本文件软件无法显示 和打印的字符,所以,如果要让记事本这样的文本处理软件能处理二进制数据,就需要一个二进制到字符串的转换方法。 Base64是一种最常见的二进制编码方法 Base64编码解码操作步骤,加密: s="hello world" s=s.encode("utf-8")          #将字符串转换为字节类型数据的编码方式可以换成其他的如"gb2312",这个没有限制 x=base64.b64encode(s)        #也可以把上面那一句整合了x=base64.b64encode(s.encode("utf-8")) x b'5rw357gioogig56'

解密过程: y=base64.b64decode(x) y=y.decode("utf-8") y "hello world"

base64加解密过程小结: src = “明文数据” tgt = base64.b64encode(src.encode(‘UTF-8’))       #编码->like 加密

src = base64.b64decode(tgt).decode(“utf-8”)       #解码,解密       base64一般不说加密解密,因为它相对于MD5和hash算法来说比较简单,一般说base64是编码解码, base64模块中也有很多种加密方法,如b64,b32,后边的数字越小加密后密文长度越长,而且选择任何一种加密方法 加密过后东西长度不固定,数据越长,加密过后的密文越长。

********************************** pycharm中鼠标有两种模式: 插入模式:把输入的代码插到光标处,后面的向后移动。 改写模式:是把当前的字替换成新输入的。编辑代码一般是用插入模式。  模式的转换组合键为外接键盘ins,   笔记本shift+0

pycharm中的规范: 声明模块和定义的函数之间空两行 定义函数的时候,函数与函数之间空两行,如果出现灰色的波浪线,并不是报错,而是书写的代码不规范

发表一篇文章的过程: 先定义一个发表文章的功能函数:article_publish() 再定义一个发表文章之后的显示页面函数  show_article_single(title) 还要定义一个根据一个标题就能查到那篇文章的功能函数   article_check_single(title)

查看多篇文章的过程: 先定义一个遍历所有文章的功能函数   article_check_all() 再定义一个显示所有文章的页面函数   show_article_list(*articles) 在该页面函数中有一个查看单篇文章的功能函数 show_article_single(title) 

查看个人文章的过程: 先定义一个查找个人文章的功能函数   check_article_self() 再调用显示所有文章的页面函数    show_article_list(*articles)  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

凯撒密码加解密及破解实现原理

概念及原理 根据百度百科上的解释,凯撒密码是一种古老的加密算法。 密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺...

44660
来自专栏Android开发与分享

【Android】RxJava的使用(二)Action

27560
来自专栏蘑菇先生的技术笔记

qt5中信号和槽的新语法

34250
来自专栏QQ音乐技术团队的专栏

RxJava的一些入门学习分享

最近在Android编程领域,RxJava这个框架的技术热度相当的高。团队对使用RxJava改进目前的项目代码也表示很有兴趣,所以我特地和团队伙伴一起对这套框...

356100
来自专栏C#

DotNet加密方式解析--散列加密

   没时间扯淡了,赶紧上车吧。    在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全、支付宝和微信账户安全、以及邮箱等等,说到信息安...

24580
来自专栏数据结构与算法

11:潜伏者

个人感觉这道题在字符串里面算是一个比较综合比较难的题目了 对于选手的数据查找能力有很强的要求 我在做这道题时运用了桶排的思想 不多说了,看代码吧,全网最简 11...

30560
来自专栏小鄧子的技术博客专栏

【译】对RxJava中.repeatWhen()和.retryWhen()操作符的思考

第一次见到.repeatWhen()和.retryWhen()这两个操作符的时候就非常困惑了。不得不说,它们绝对是“最令人困惑弹珠图”的有力角逐者。

13720
来自专栏用户画像

Ping++ 支付接口对接

14810
来自专栏xingoo, 一个梦想做发明家的程序员

【手把手教你全文检索】Lucene索引的【增、删、改、查】

前言   搞检索的,应该多少都会了解Lucene一些,它开源而且简单上手,官方API足够编写些小DEMO。并且根据倒排索引,实现快速检索。本文就简单的实现增...

24050
来自专栏编程之旅

iOS开发——32位MD5加密

在IOS开发过程中,为了保证数据的安全,我们通常要采取一些加密方法,常见的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前来说一般是...

20520

扫码关注云+社区

领取腾讯云代金券