用python管理自己的密碼
為什么要使用UUID?
大數(shù)據(jù)時代,各種網(wǎng)站都需要你注冊賬號,使用密碼。往往大家為了省事,所有的平臺的賬號密碼是一樣的,假如某個網(wǎng)站數(shù)據(jù)泄露后,那你的隱私安全就有問題了,干壞事的有心人就會去竊取你的隱私信息。
市面上也有很多密碼管理器,但是那是別人的密碼管理器。生成規(guī)則是人家的,密碼安全問題不能假手他人。
為了安全,還是自己制定規(guī)則,管理自己的密碼。
準(zhǔn)備工作
大鄧用的是python3.6,提前安裝好了uuid庫。
我們先簡單了解下uuid工作原理,后面會有一個大鄧管理自己賬號密碼的代碼(演示用,賬號是真的,但是密碼肯定不是大鄧的)
uuid庫
UUID Documents
UUID是128位的全局唯一標(biāo)識符,通常由32字節(jié)的字符串表示。
它可以保證時間和空間的唯一性,也稱為GUID,全稱為:
UUID —— Universally Unique IDentifier Python 中叫 UUID
它通過MAC地址、時間戳、命名空間、隨機(jī)數(shù)、偽隨機(jī)數(shù)來保證生成ID的唯一性。
UUID主要有五個算法,也就是五種方法來實現(xiàn):
uuid1()—基于時間戳
由MAC地址、當(dāng)前時間戳(當(dāng)前時間)、隨機(jī)數(shù)生成。可以保證全球范圍內(nèi)的唯一性
- 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。
命名空間參數(shù)為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()—基于隨機(jī)數(shù)
由偽隨機(jī)數(shù)得到,有一定的重復(fù)概率,該概率可以計算出來。
- 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 算法
命名空間參數(shù)為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
如何管理我們的賬號密碼
寫一個腳本,放在自己電腦上,每個月定期更新密碼。
密碼的生成規(guī)則你可以自己設(shè)計,這里我就用基于賬號名生成
- 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
密碼太長,再簡單點
我們可以隨機(jī)抽取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
注意:
要記得把代碼放置在安全位置,
避免因為規(guī)則泄露導(dǎo)致自己賬號面臨被盜風(fēng)險
而且也要定期修改密碼規(guī)則