用python管理自己的密码

简介:

用python管理自己的密码

为什么要使用UUID?

大数据时代,各种网站都需要你注册账号,使用密码。往往大家为了省事,所有的平台的账号密码是一样的,假如某个网站数据泄露后,那你的隐私安全就有问题了,干坏事的有心人就会去窃取你的隐私信息。

市面上也有很多密码管理器,但是那是别人的密码管理器。生成规则是人家的,密码安全问题不能假手他人。

为了安全,还是自己制定规则,管理自己的密码。

准备工作

大邓用的是python3.6,提前安装好了uuid库。

我们先简单了解下uuid工作原理,后面会有一个大邓管理自己账号密码的代码(演示用,账号是真的,但是密码肯定不是大邓的)

uuid库

UUID Documents

UUID是128位的全局唯一标识符,通常由32字节的字符串表示。

它可以保证时间和空间的唯一性,也称为GUID,全称为:

UUID —— Universally Unique IDentifier Python 中叫 UUID

它通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生成ID的唯一性。

UUID主要有五个算法,也就是五种方法来实现:

uuid1()—基于时间戳

由MAC地址、当前时间戳(当前时间)、随机数生成。可以保证全球范围内的唯一性

 
  1. import uuid 
  2. for i in range(10): 
  3.     print(uuid.uuid1())  
 
  1. ddca8718-2f9f-11e7-a819-7c04d0d818f6 
  2.  
  3. ddca9e1a-2f9f-11e7-af4b-7c04d0d818f6 
  4.  
  5. ddcac162-2f9f-11e7-86c7-7c04d0d818f6 
  6.  
  7. ddcac638-2f9f-11e7-acfc-7c04d0d818f6 
  8.  
  9. ddcaccb4-2f9f-11e7-b86e-7c04d0d818f6 
  10.  
  11. ddcadfd8-2f9f-11e7-a3aa-7c04d0d818f6 
  12.  
  13. ddcae528-2f9f-11e7-83db-7c04d0d818f6 
  14.  
  15. ddcae92e-2f9f-11e7-adee-7c04d0d818f6 
  16.  
  17. ddcaede8-2f9f-11e7-bb6b-7c04d0d818f6 
  18.  
  19. ddcaf374-2f9f-11e7-9dbd-7c04d0d818f6  

uuid3()—基于名字的MD5散列值

通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,

和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。

命名空间参数为uuid.NAMESPACEOID、uuid.NAMESPACEDNS、uuid.NAMESPACEURL、uuid.NAMESPACEX500

 
  1. names = ['Ruby','Python','Java','C','GO','Scala'
  2. for name in names: 
  3.     print(name,uuid.uuid3(uuid.NAMESPACE_OID, name))  
 
  1. Ruby aab9b591-c3ec-3f66-b4cb-203a5f6eaaf3 
  2.  
  3. Python fa01b787-98ed-334f-b44b-a14ca4b10aed 
  4.  
  5. Java b055e743-a030-3094-99df-ae4b98964a50 
  6.  
  7. C 3ee5528d-3dbb-33cb-b910-f8215831ca48 
  8.  
  9. GO c3724662-749e-35b8-9277-89d4a51c27a0 
  10.  
  11. Scala da8c34df-2de1-3033-97e2-16a324547aea  

uuid4()—基于随机数

由伪随机数得到,有一定的重复概率,该概率可以计算出来。

 
  1. uuid.uuid4()  
 
  1. UUID('c5807b94-b3fa-49b0-9833-42e10d7a1c9e' 
 
  1. uuid.uuid4()  
 
  1. UUID('16c62a93-37c7-41db-92c6-02cdd15c921d' 
 
  1. for i in range(5): 
  2.  
  3. print(uuid.uuid4())  
 
  1. de3e5a6c-2dd3-47dd-bace-13f6e78c1b9e 
  2.  
  3. b94e3965-a3e1-41d9-b994-b8c41fd2e5ca 
  4.  
  5. 86f9d597-cd7e-446c-ad7e-ae20d2df33b9 
  6.  
  7. 70b9a3ff-93bb-4fce-9908-4ad38869084c 
  8.  
  9. 1d76ab15-0def-476e-a50f-760e550d6baa  

uuid5()—基于名字的SHA-1散列值

算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法

命名空间参数为uuid.NAMESPACEOID、uuid.NAMESPACEDNS、uuid.NAMESPACEURL、uuid.NAMESPACEX500

 
  1. urls = ['www.baidu.com'
  2.         'www.baidu.com'
  3.        'www.baidu.com.cn'
  4.        'www.sina.com'
  5. for url in urls: 
  6.     print(uuid.uuid5(uuid.NAMESPACE_URL,url))  
 
  1. 8f2b1f65-47f4-5f18-91bc-322ea163bbb0 
  2.  
  3. 8f2b1f65-47f4-5f18-91bc-322ea163bbb0 
  4.  
  5. 04b04aa6-c18a-54d8-b6e7-4087984162ce 
  6.  
  7. 3db2a294-d09f-558c-b0f2-976f4acb97a6  

如何管理我们的账号密码

写一个脚本,放在自己电脑上,每个月定期更新密码。

密码的生成规则你可以自己设计,这里我就用基于账号名生成

 
  1. accounts = ['微博:邓旭东HIT','微信:邓旭东','知乎:邓旭东HIT'
  2. def gen_pwd(accounts): 
  3.     for account in accounts: 
  4.         pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) 
  5.         print(account,'密码:%s'%pwd) 
  6. gen_pwd(accounts)  
 
  1. 微博:邓旭东HIT 密码:c8155d00-205b-5cba-9d25-9947bd54df70 
  2.  
  3. 微信:邓旭东 密码:67397b79-1245-5a08-9962-18757e52eb17 
  4.  
  5. 知乎:邓旭东HIT 密码:4fc67722-5e5c-5df2-9a8b-694cf2af1bed  

密码太长,再简单点

我们可以随机抽取10位字符,这里大邓简单点,直接截取[5:15]中的密码

 
  1. accounts = ['微博:邓旭东HIT','微信:邓旭东','知乎:邓旭东HIT'
  2. def gen_pwd(accounts): 
  3.     for account in accounts: 
  4.         pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) 
  5.         pwd = str(pwd)[5:25] 
  6.         print(account,'密码:%s'%pwd) 
  7. gen_pwd(accounts)  
 
  1. 微博:邓旭东HIT 密码:d00-205b-5cba-9d25-9 
  2.  
  3. 微信:邓旭东 密码:b79-1245-5a08-9962-1 
  4.  
  5. 知乎:邓旭东HIT 密码:722-5e5c-5df2-9a8b-6  

去掉-,再看看密码啥样子

有“-”看着别扭,去掉

 
  1. accounts = ['微博:邓旭东HIT','微信:邓旭东','知乎:邓旭东HIT'
  2. def gen_pwd(accounts): 
  3.     for account in accounts: 
  4.         pwd=uuid.uuid5(uuid.NAMESPACE_OID, account) 
  5.         pwd = str(pwd)[5:25].replace('-',''
  6.         print(account,'密码:%s'%pwd) 
  7. gen_pwd(accounts)  
 
  1. 微博:邓旭东HIT 密码:d00205b5cba9d259 
  2.  
  3. 微信:邓旭东 密码:b7912455a0899621 
  4.  
  5. 知乎:邓旭东HIT 密码:7225e5c5df29a8b6  

注意:

要记得把代码放置在安全位置,

避免因为规则泄露导致自己账号面临被盗风险

而且也要定期修改密码规则


本文作者:邓旭东HIT

来源:51CTO

相关文章
|
9天前
|
存储 安全 算法
RSA在手,安全我有!Python加密解密技术,让你的数据密码坚不可摧
【9月更文挑战第11天】在数字化时代,信息安全至关重要。传统的加密方法已难以应对日益复杂的网络攻击。RSA加密算法凭借其强大的安全性和广泛的应用场景,成为保护敏感数据的首选。本文介绍RSA的基本原理及在Python中的实现方法,并探讨其优势与挑战。通过使用PyCryptodome库,我们展示了RSA加密解密的完整流程,帮助读者理解如何利用RSA为数据提供安全保障。
25 5
|
12天前
|
安全 数据安全/隐私保护 Python
情书也能加密?Python AES&RSA,让每一份数据都充满爱的密码
【9月更文挑战第8天】在这个数字化时代,情书不再局限于纸笔,也可能以电子形式在网络中传递。为了确保其安全,Python提供了AES和RSA等加密工具,为情书编织爱的密码。首先,通过安装pycryptodome库,我们可以利用AES对称加密算法高效保护数据;接着,使用RSA非对称加密算法加密AES密钥和IV,进一步增强安全性。即使情书被截获,没有正确密钥也无法解读内容。让我们用Python为爱情编织一张安全的网,守护每份珍贵情感。
26 2
|
1月前
|
数据安全/隐私保护 Python
Python 解压还密码的压缩文件 LookupError: Couldn't find path to unrar library.
Python 解压还密码的压缩文件 LookupError: Couldn't find path to unrar library.
41 2
|
1月前
|
安全 数据安全/隐私保护 Python
【Leetcode刷题Python】密码校验
文章提供了一个Python程序,用于验证密码是否符合特定的安全标准,包括密码长度至少为6,数字字符个数少于字母字符个数,没有连续5个字符是字母,以及没有连续两个字符是一模一样的,并输出每个密码是否符合这些条件。
21 3
|
1月前
|
安全 数据安全/隐私保护 Python
|
2月前
|
数据挖掘 Python
🚀告别繁琐!Python I/O管理实战,文件读写效率飙升的秘密
【7月更文挑战第29天】在 Python 编程中,高效的文件 I/O 对性能至关重要。
39 4
|
2月前
|
安全 数据安全/隐私保护 Python
|
2月前
|
JSON 监控 开发者
Python I/O管理新篇章:优化你的程序,让数据流动更顺畅
【7月更文挑战第30天】在数据驱动时代, Python I/O操作效率至关重要。理解I/O瓶颈,使用缓冲技术(如调整`open`的`buffering`参数),并发与异步I/O(借助`asyncio`),高效序列化(json, msgpack),及监控调试(cProfile)能显著提升性能。示例展示了缓冲读取和异步文件操作的最佳实践。不断学习可助开发者优化数据流。
55 2