济南seo网站关键词优化排名,广州10大网站开发,广州市网站设计,长沙武广新城建设网站os模块 os模块是与操作系统交互的一个接口 ?123456789101112131415161718192021222324252627282930313233343536em#和文件夹相关os.makedirs(dirname1/dirname2) 可生成多层递归目录os.removedirs(dirname1) 若目录为空#xff0c;则删除#xff0c;并递归到…os模块 os模块是与操作系统交互的一个接口 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 em#和文件夹相关 os.makedirs(dirname1/dirname2) 可生成多层递归目录 os.removedirs(dirname1) 若目录为空则删除并递归到上一级目录如若也为空则删除依此类推 os.mkdir(dirname) 生成单级目录相当于shell中mkdir dirname os.rmdir(dirname) 删除单级空目录若目录不为空则无法删除报错相当于shell中rmdir dirname os.listdir(dirname) 列出指定目录下的所有文件和子目录包括隐藏文件并以列表方式打印 # 和文件相关 os.remove() 删除一个文件 os.rename(oldname,newname) 重命名文件/目录 os.stat(path/filename) 获取文件/目录信息 # 和操作系统差异相关 os.sep 输出操作系统特定的路径分隔符win下为\\,Linux下为/ os.linesep 输出当前平台使用的行终止符win下为\r\n,Linux下为\n os.pathsep 输出用于分割文件路径的字符串 win下为;,Linux下为: os.name 输出字符串指示当前使用平台。win-nt; Linux-posix # 和执行系统命令相关 os.system(bash command) 运行shell命令直接显示 os.popen(bash command).read() 运行shell命令获取执行结果 os.environ 获取系统环境变量 #path系列和路径相关 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以或\结尾那么就会返回空值即os.path.split(path)的第二个元素。 os.path.exists(path) 如果path存在返回True如果path不存在返回False os.path.isabs(path) 如果path是绝对路径返回True os.path.isfile(path) 如果path是一个存在的文件返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小br/em ? 1 2 3 4 os.getcwd() 获取当前工作目录即当前python脚本工作的目录路径 os.chdir(dirname) 改变当前脚本工作目录相当于shell下cd os.curdir 返回当前目录: (.) os.pardir 获取当前目录的父目录字符串名(..) 注意os.stat(path/filename) 获取文件/目录信息 的结构说明 ? 1 2 3 4 5 6 7 8 9 10 11 stat 结构: st_mode: inode 保护模式 st_ino: inode 节点号。 st_dev: inode 驻留的设备。 st_nlink: inode 的链接数。 st_uid: 所有者的用户ID。 st_gid: 所有者的组ID。 st_size: 普通文件以字节为单位的大小包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。 st_ctime: 由操作系统报告的ctime。在某些系统上如Unix是最新的元数据更改的时间在其它系统上如Windows是创建时间详细信息参见平台的文档。 回到顶部 sys模块 sys模块是与python解释器交互的一个接口 ? 1 2 3 4 5 sys.argv 命令行参数List第一个元素是程序本身路径 sys.exit(n) 退出程序正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 回到顶部 hashlib模块 算法介绍 Python的hashlib提供了常见的摘要算法如MD5SHA1等等。 什么是摘要算法呢摘要算法又称哈希算法、散列算法。它通过一个函数把任意长度的数据转换为一个长度固定的数据串通常用16进制的字符串表示。 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest目的是为了发现原始数据是否被人篡改过。 摘要算法之所以能指出数据是否被篡改过就是因为摘要函数是一个单向函数计算f(data)很容易但通过digest反推data却非常困难。而且对原始数据做一个bit的修改都会导致计算出的摘要完全不同。 我们以常见的摘要算法MD5为例计算出一个字符串的MD5值 ? 1 2 3 4 5 6 7 import hashlib md5 hashlib.md5() md5.update(how.encode(utf-8)) print(md5.hexdigest()) 结果:db88a0257c220dbfdd2e40f6152d6a8d 如果数据量很大可以分块多次调用update()最后计算的结果是一样的 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 import hashlib md5 hashlib.md5() md5.update(how你好啊,我不好.encode(utf-8)) print(md5.hexdigest()) 结果:3bfa4bfb7b59a59f27c24ebdd89cd13c import hashlib md5 hashlib.md5() md5.update(how.encode(utf-8)) md5.update(你好啊,我不好.encode(utf-8)) print(md5.hexdigest()) 结果:3bfa4bfb7b59a59f27c24ebdd89cd13c MD5是最常见的摘要算法速度很快生成结果是固定的128 bit字节通常用一个32位的16进制字符串表示。另一种常见的摘要算法是SHA1调用SHA1和调用MD5完全类似 ? 1 2 3 4 5 6 7 8 import hashlib sha1 hashlib.sha1() sha1.update(how to use sha1 in.encode(utf-8)) sha1.update(python hashlib?.encode(utf-8)) print(sha1.hexdigest()) 结果:86e1eae2a08c152d39b55baed085c71a0cc9d10b SHA1的结果是160 bit字节通常用一个40位的16进制字符串表示。 SHA1的安全系数比MD5还要高一些,而且摘要的长度要比MD5长一些. 比SHA1更安全的算法是SHA256和SHA512不过越安全的算法越慢而且摘要长度更长。 摘要算法应用 任何允许用户登录的网站都会存储用户登录的用户名和口令。如何存储用户名和口令呢方法是存到数据库表中 ? 1 2 3 4 5 name | password ------------------ michael | 123456 bob | abc999 alice | alice2008 如果以明文保存用户口令数据库泄露所有用户的口令就落入黑客的手里就...... 此外网站运维人员是可以访问数据库的也就是能获取到所有用户的口令。正确的保存口令的方式是不存储用户的明文口令而是存储用户口令的摘要比如MD5 ? 1 2 3 4 5 username | password ------------------------------------------ michael | e10adc3949ba59abbe56e057f20f883e bob | 878ef96e86145580c38c87f0410ad153 alice | 99b1c2188db85afee403b1536010c2c9 考虑这么个情况很多用户喜欢用123456888888password这些简单的口令于是黑客可以事先计算出这些常用口令的MD5值得到一个反推表 e10adc3949ba59abbe56e057f20f883e: 12345621218cca77804d2ba1922c33e0151105: 8888885f4dcc3b5aa765d61d8327deb882cf99: password 这样无需破解只需要对比数据库的MD5黑客就获得了使用常用口令的用户账号。 对于用户来讲当然不要使用过于简单的口令。但是我们能否在程序设计上对简单口令加强保护呢 由于常用口令的MD5值很容易被计算出来所以要确保存储的用户口令不是那些已经被计算出来的常用口令的MD5这一方法通过对原始口令加一个复杂字符串来实现俗称“加盐” ? 1 2 3 4 5 6 7 8 9 10 11 12 import hashlib md5 hashlib.md5(salt.encode(utf-8)) #这是加盐了的 md5.update(how你好啊,我不好.encode(utf-8)) print(md5.hexdigest()) #结果 49f3d086ef5582b12d294c6f1b1c9dea import hashlib md5 hashlib.md5() md5.update(how你好啊,我不好.encode(utf-8)) print(md5.hexdigest()) #结果 3bfa4bfb7b59a59f27c24ebdd89cd13c 经过Salt处理的MD5口令只要Salt不被黑客知道即使用户输入简单口令也很难通过MD5反推明文口令。 但是如果有两个用户都使用了相同的简单口令比如123456在数据库中将存储两条相同的MD5值这说明这两个用户的口令是一样的。有没有办法让使用相同口令的用户存储不同的MD5呢 如果假定用户无法修改登录名就可以通过把登录名作为Salt的一部分来计算MD5从而实现相同口令的用户也存储不同的MD5。 摘要算法在很多地方都有广泛的应用。要注意摘要算法不是加密算法不能用于加密因为无法通过摘要反推明文只能用于防篡改但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。转载于:https://www.cnblogs.com/sl123/p/10305791.html