Fork me on GitHub

【进阶03】【自学笔记】Python sys模块的用法以及hashlib实战

一、sys模块的用法

1. 命令行参数

传递给 Python 程序的命令行参数由 sys 模块存储在名为 argv 的列表中。默认情况下,argv 的长度为1,由程序名称组成。

假如我写了一个名为 sys01.py 程序,内容如下:

from sys import argv
for i in range(len(argv)):
print(argv[i])

然后我在命令行下运行这个程序:

它输出了该程序的名称,如果我在其后面添加几个参数,便会输出几个参数:

 

它会该程序名称和后面所有的参数。

2.退出 Python 程序

在某些情况下,sys 模块的退出功能可用于终止程序并从程序退出。传递给exit的参数是可选的。

例如:

import sys 

password = input() 

if(password == '错误的密码'):
    print('密码错误')
    sys.exit() 

else:
    print('欢迎光临')

  

3.设置并获取Python解释器堆栈的深度

我们可以通过"setrecursionlimit"功能设置解释器堆栈深度。此限制可防止无限递归导致 C 堆栈溢出和 Python 崩溃。 sys 模块中的"getrecursionlimit"函数返回递归限制的当前值,即 Python 解释器堆栈的最大深度。

import sys

# 请不要设置负数或者将值设置的过低
limit = int(input('Python 解释器堆栈的深度应该是多少 '))

sys.setrecursionlimit(limit)

print('堆栈的深度应该是', sys.getrecursionlimit()) 
 

4.获取解释器版本

在Python中,解释器的高级版本具有一些高级功能,较旧版本的解释器可能不支持。在这种情况下,我们必须确定解释器的版本是否可以使用某些较新的功能。 sys.hexversion 可用于查找解释器的版本。

import sys
# 检查解释器的版本是否至少为1.5.2
if sys.hexversion >= 0x010502F0:
   print(f"当前版本{sys.hexversion }拥有高级功能")
else:
    print("当前版本比较低")

  

5.确定系统版本

程序中某些功能的实现可能因平台而异。

import sys
platform = sys.platform
print(platform)

 

二、hashlib加密算法

# coding=utf-8
#一、hashlib加密算法
import hashlib
hash = hashlib.sha256()  # 通过构造函数获得一个hash对象
hash.update(b'Nobody inspects') # 使用hash对象的update方法添加消息
hash.digest()              # 获得bytes类型的消息摘要
print(hash.hexdigest())  #产出hash值,拿到加密字符串

#更简洁的用法:
res=hashlib.sha256(b"Nobody inspects the spammish repetition").hexdigest()
print(res)
#方法二、hashlib.new(name[, data]) 一个通用的构造方法,name是某个算法的字符串名称,data是可选的bytes类型待摘要的数据。
h = hashlib.new('sha256',b"haha")
print(h.hexdigest())
hash.update(arg)
更新hash对象。连续的调用该方法相当于连续的追加更新。例如m.update(a); m.update(b)相当于m.update(a+b)。注意,当数据规模较大的时候,Python的GIL在此时会解锁,用于提高计算速度。
一定要理解update()的作用,由于消息摘要是只针对当前状态产生的,所以每一次update后,再次计算hexdigest()的值都会不一样。
 
hash.digest()
返回bytes格式的消息摘要
 
hash.hexdigest()
与digest方法类似,不过返回的是两倍长度的字符串对象,所有的字符都是十六进制的数字。通常用于邮件传输或非二进制环境中。通常我们比较摘要时,比较的就是这个值!
 
hash.copy()
返回一个hash对象的拷贝
#md5加密
#给密码字符串“password”加上字符串“salt”,这里的“salt”字符串就是所谓的盐,其摘要值必然不等于正常摘要“password”字符串的值。当然这个“salt”具体是什么,完全可以自定义,而且不能告诉他人!千万不要以为加盐就是加个“salt”字符串。
md5 = hashlib.md5()
s = "password" + "salt"
md5.update(s.encode())
print(md5.hexdigest())

  


posted @ 2022-01-01 18:14  橘子偏爱橙子  阅读(120)  评论(0编辑  收藏  举报