用python管理自己的密码
为什么要使用UUID?
大数据时代,各种网站都需要你注册账号,使用密码。往往大家为了省事,所有的平台的账号密码是一样的,假如某个网站数据泄露后,那你的隐私安全就有问题了,干坏事的有心人就会去窃取你的隐私信息。
市面上也有很多密码管理器,但是那是别人的密码管理器。生成规则是人家的,密码安全问题不能假手他人。
为了安全,还是自己制定规则,管理自己的密码。
准备工作
大邓用的是python3.6,提前安装好了uuid库。
我们先简单了解下uuid工作原理,后面会有一个大邓管理自己账号密码的代码(演示用,账号是真的,但是密码肯定不是大邓的)
uuid库
UUID Documents
UUID是128位的全局唯一标识符,通常由32字节的字符串表示。
它可以保证时间和空间的唯一性,也称为GUID,全称为:
UUID —— Universally Unique IDentifier Python 中叫 UUID
它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。
UUID主要有五个算法,也就是五种方法来实现:
uuid1()—基于时间戳
由MAC地址、当前时间戳(当前时间)、随机数生成。可以保证全球范围内的唯一性
import uuid for i in range(10): print(uuid.uuid1())
ddca8718-2f9f-11e7-a819-7c04d0d818f6 ddca9e1a-2f9f-11e7-af4b-7c04d0d818f6 ddcac162-2f9f-11e7-86c7-7c04d0d818f6 ddcac638-2f9f-11e7-acfc-7c04d0d818f6 ddcaccb4-2f9f-11e7-b86e-7c04d0d818f6 ddcadfd8-2f9f-11e7-a3aa-7c04d0d818f6 ddcae528-2f9f-11e7-83db-7c04d0d818f6 ddcae92e-2f9f-11e7-adee-7c04d0d818f6 ddcaede8-2f9f-11e7-bb6b-7c04d0d818f6 ddcaf374-2f9f-11e7-9dbd-7c04d0d818f6
uuid3()—基于名字的MD5散列值
通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,
和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
命名空间参数为uuid.NAMESPACEOID、uuid.NAMESPACEDNS、uuid.NAMESPACEURL、uuid.NAMESPACEX500
names = [Ruby,Python,Java,C,GO,Scala] for name in names: print(name,uuid.uuid3(uuid.NAMESPACE_OID, name))
Ruby aab9b591-c3ec-3f66-b4cb-203a5f6eaaf3 Python fa01b787-98ed-334f-b44b-a14ca4b10aed Java b055e743-a030-3094-99df-ae4b98964a50 C 3ee5528d-3dbb-33cb-b910-f8215831ca48 GO c3724662-749e-35b8-9277-89d4a51c27a0 Scala da8c34df-2de1-3033-97e2-16a324547aea
uuid4()—基于随机数
由伪随机数得到,有一定的重复概率,该概率可以计算出来。
uuid.uuid4()
UUID(c5807b94-b3fa-49b0-9833-42e10d7a1c9e)
uuid.uuid4()
UUID(16c62a93-37c7-41db-92c6-02cdd15c921d)
for i in range(5): print(uuid.uuid4())
de3e5a6c-2dd3-47dd-bace-13f6e78c1b9e b94e3965-a3e1-41d9-b994-b8c41fd2e5ca 86f9d597-cd7e-446c-ad7e-ae20d2df33b9 70b9a3ff-93bb-4fce-9908-4ad38869084c 1d76ab15-0def-476e-a50f-760e550d6baa
uuid5()—基于名字的SHA-1散列值
算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法
命名空间参数为uuid.NAMESPACEOID、uuid.NAMESPACEDNS、uuid.NAMESPACEURL、uuid.NAMESPACEX500
urls = [www.baidu.com, www.baidu.com, www.baidu.com.cn, www.sina.com] for url in urls: print(uuid.uuid5(uuid.NAMESPACE_URL,url))
8f2b1f65-47f4-5f18-91bc-322ea163bbb0 8f2b1f65-47f4-5f18-91bc-322ea163bbb0 04b04aa6-c18a-54d8-b6e7-4087984162ce 3db2a294-d09f-558c-b0f2-976f4acb97a6
如何管理我们的账号密码
写一个脚本,放在自己电脑上,每个月定期更新密码。
密码的生成规则你可以自己设计,这里我就用基于账号名生成
accounts = [微博:邓旭东HIT,微信:邓旭东,知乎:邓旭东HIT] def gen_pwd(accounts): for account in accounts: pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) print(account,密码:%s%pwd) gen_pwd(accounts)
微博:邓旭东HIT 密码:c8155d00-205b-5cba-9d25-9947bd54df70 微信:邓旭东 密码:67397b79-1245-5a08-9962-18757e52eb17 知乎:邓旭东HIT 密码:4fc67722-5e5c-5df2-9a8b-694cf2af1bed
密码太长,再简单点
我们可以随机抽取10位字符,这里大邓简单点,直接截取[5:15]中的密码
accounts = [微博:邓旭东HIT,微信:邓旭东,知乎:邓旭东HIT] def gen_pwd(accounts): for account in accounts: pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) pwd = str(pwd)[5:25] print(account,密码:%s%pwd) gen_pwd(accounts)
微博:邓旭东HIT 密码:d00-205b-5cba-9d25-9 微信:邓旭东 密码:b79-1245-5a08-9962-1 知乎:邓旭东HIT 密码:722-5e5c-5df2-9a8b-6
去掉-,再看看密码啥样子
有“-”看着别扭,去掉
accounts = [微博:邓旭东HIT,微信:邓旭东,知乎:邓旭东HIT] def gen_pwd(accounts): for account in accounts: pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) pwd = str(pwd)[5:25].replace(-,) print(account,密码:%s%pwd) gen_pwd(accounts)
微博:邓旭东HIT 密码:d00205b5cba9d259 微信:邓旭东 密码:b7912455a0899621 知乎:邓旭东HIT 密码:7225e5c5df29a8b6
注意:
要记得把代码放置在安全位置,
避免因为规则泄露导致自己账号面临被盗风险
而且也要定期修改密码规则
本文作者:邓旭东HIT
来源:51CTO
【Python】编写代码,实现恺撒密码的加密算法以及欧氏距离程序 在本次python文章种,编写此函数的目的,主要是为了理解和掌握自定义函数过程的定义和调用方法,以及函数中的参数的作用,本次定义的函数是恺撒密码加解密算法
相关文章
- 【华为OD机试真题 python】最长的密码【2022 Q4 | 100分】
- 【华为OD机试真题 python】猜密码 【2022 Q4 | 200分】
- 为什么那么多自学Python的后来都放弃了,总结起来就这些原因
- python中BSON模块使用详解
- 运维之python篇------2.斐波那契数列、模拟cp操作、生成8位随机密码
- 【Python】+数字时间戳转换为指定格式
- 零基础怎么转行IT ?为什么要学习python?(上)
- Python基础必掌握的pip管理依赖项
- 《从问题到程序:用Python学编程和计算》——2.3 内置函数和数学函数包
- 【华为OD机试真题java、python、c++、JsNode】通信误码【2022 Q4 | 100分】
- Python学习---Python下[set集合]的学习
- 【图像处理】——正装照换底色Python
- 如何利用神经网络和Python生成指定模式的密码