最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實現(xiàn)的密碼強度檢測器示例

 更新時間:2017年08月23日 11:58:42   作者:exmy  
這篇文章主要介紹了Python實現(xiàn)的密碼強度檢測器,結(jié)合實例形式分析了Python密碼強度檢測的原理與實現(xiàn)方法,涉及Python字符串運算與轉(zhuǎn)換、判斷等相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Python實現(xiàn)的密碼強度檢測器。分享給大家供大家參考,具體如下:

密碼強度

密碼強度如何量化呢?

一個密碼可以有以下幾種類型:長度、大寫字母、小寫字母、數(shù)字以及特殊符號。

顯然,密碼包含的特征越多、長度越長,其強度也就越高。

我們設(shè)置幾個等級來評測密碼強度,分別是:terrible, simple,
medium, strong
。

不同的應(yīng)用可能對密碼強度的要求不一樣,我們引入最小程度(min_length)和最小特征數(shù)(min_types),作為可配置選項。

這樣我們就可以檢測密碼包含的特征,特征與密碼之間的關(guān)系可以簡單定義為:

特征數(shù) 強度
小于最小長度 terrible
常用密碼或規(guī)則的密碼 simple
小于最小特征數(shù) medium
大于或等于最小特征數(shù) strong

另:常用的1萬個密碼點擊此處本站下載

代碼實現(xiàn)

check.py

# coding: utf-8
"""
check
Check if your password safe
"""
import re
# 特征
NUMBER = re.compile(r'[0-9]')
LOWER_CASE = re.compile(r'[a-z]')
UPPER_CASE = re.compile(r'[A-Z]')
OTHERS = re.compile(r'[^0-9A-Za-z]')
def load_common_password():
 words = []
 with open("10k_most_common.txt", "r") as f:
  for word in f:
   words.append(word.strip())
 return words
COMMON_WORDS = load_common_password()
# 管理密碼強度的類
class Strength(object):
 """
 密碼強度三個屬性:是否有效valid, 強度strength, 提示信息message
 """
 def __init__(self, valid, strength, message):
  self.valid = valid
  self.strength = strength
  self.message = message
 def __repr__(self):
  return self.strength
 def __str__(self):
  return self.message
 def __bool__(self):
  return self.valid
class Password(object):
 TERRIBLE = 0
 SIMPLE = 1
 MEDIUM = 2
 STRONG = 3
 @staticmethod
 def is_regular(input):
  regular = ''.join(['qwertyuiop', 'asdfghjkl', 'zxcvbnm'])
  return input in regular or input[::-1] in regular
 @staticmethod
 def is_by_step(input):
  delta = ord(input[1]) - ord(input[0])
  for i in range(2, len(input)):
   if ord(input[i]) - ord(input[i - 1]) != delta:
    return False
  return True
 @staticmethod
 def is_common(input):
  return input in COMMON_WORDS
 def __call__(self, input, min_length=6, min_type=3, level=STRONG):
  if len(input) < min_length:
   return Strength(False, "terrible", "密碼太短了")
  if self.is_regular(input) or self.is_by_step(input):
   return Strength(False, "simple", "密碼有規(guī)則")
  if self.is_common(input):
   return Strength(False, "simple", "密碼很常見")
  types = 0
  if NUMBER.search(input):
   types += 1
  if LOWER_CASE.search(input):
   types += 1
  if UPPER_CASE.search(input):
   types += 1
  if OTHERS.search(input):
   types += 1
  if types < 2:
   return Strength(level <= self.SIMPLE, "simple", "密碼太簡單了")
  if types < min_type:
   return Strength(level <= self.MEDIUM, "medium", "密碼還不夠強")
  return Strength(True, "strong", "密碼很強")
class Email(object):
 def __init__(self, email):
  self.email = email
 def is_valid_email(self):
  if re.match("^.+@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", self.email):
   return True
  return False
 def get_email_type(self):
  types = ['qq', '163', 'gmail', '126', 'sina']
  email_type = re.search('@\w+', self.email).group()[1:]
  if email_type in types:
   return email_type
  return 'wrong email'
password = Password()

test_check.py: 用于單元測試

# coding: utf-8
"""
test for check
"""
import unittest
import check
class TestCheck(unittest.TestCase):
 def test_regular(self):
  rv = check.password("qwerty")
  self.assertTrue(repr(rv) == "simple")
  self.assertTrue('規(guī)則' in rv.message)
 def test_by_step(self):
  rv = check.password("abcdefg")
  self.assertTrue(repr(rv) == "simple")
  self.assertTrue('規(guī)則' in rv.message)
 def test_common(self):
  rv = check.password("password")
  self.assertTrue(repr(rv) == "simple")
  self.assertTrue('常見' in rv.message)
 def test_medium(self):
  rv = check.password("ahj01a")
  self.assertTrue(repr(rv) == 'medium')
  self.assertTrue('不夠強' in rv.message)
 def test_strong(self):
  rv = check.password("asjka9AD")
  self.assertTrue(repr(rv) == 'strong')
  self.assertTrue('很強' in rv.message)
 # 測試郵箱
 def test_email(self):
  rv = check.Email("123@gmail.com")
  self.assertEqual(rv.is_valid_email(), True)
 def test_email_type(self):
  rv = check.Email("123@gmail.com")
  types = ['qq', '163', 'gmail', '126', 'sina']
  self.assertIn(rv.get_email_type(), types)
if __name__ == '__main__':
 unittest.main()

PS:這里再為大家提供兩款相關(guān)在線工具供大家參考使用:

在線隨機數(shù)字/字符串生成工具:
http://tools.jb51.net/aideddesign/suijishu

高強度密碼生成器:
http://tools.jb51.net/password/CreateStrongPassword

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進階經(jīng)典教程》及《Python文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • 對Python中創(chuàng)建進程的兩種方式以及進程池詳解

    對Python中創(chuàng)建進程的兩種方式以及進程池詳解

    今天小編就為大家分享一篇對Python中創(chuàng)建進程的兩種方式以及進程池詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 淺析Python函數(shù)式編程

    淺析Python函數(shù)式編程

    在本篇文章中我們給大家分享了關(guān)于Python函數(shù)式編程的相關(guān)知識點內(nèi)容,有興趣的朋友參考下。
    2018-10-10
  • Python十大列表操作技巧分享

    Python十大列表操作技巧分享

    這篇文章給大家介紹了Python十大列表操作技巧分享,列表展開,降維,分塊,轉(zhuǎn)置,查找眾數(shù),判斷重復(fù)元素等十個操作技巧,并通過代碼示例給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 詳解python pandas 分組統(tǒng)計的方法

    詳解python pandas 分組統(tǒng)計的方法

    這篇文章主要介紹了詳解pandas python 分組統(tǒng)計的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python中元類用法實例

    python中元類用法實例

    這篇文章主要介紹了python中元類用法實例,對于學(xué)習(xí)Python有不錯的參考借鑒價值,需要的朋友可以參考下
    2014-10-10
  • python 基于Apscheduler實現(xiàn)定時任務(wù)

    python 基于Apscheduler實現(xiàn)定時任務(wù)

    這篇文章主要介紹了python Apscheduler的使用方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • pytorch加載自己的數(shù)據(jù)集源碼分享

    pytorch加載自己的數(shù)據(jù)集源碼分享

    這篇文章主要介紹了pytorch加載自己的數(shù)據(jù)集源碼分享,標準的數(shù)據(jù)集流程梳理分為數(shù)據(jù)準備以及加載數(shù)據(jù)庫–>數(shù)據(jù)加載器的調(diào)用或者設(shè)計–>批量調(diào)用進行訓(xùn)練或者其他作用,需要的朋友可以參考下
    2022-08-08
  • 如何在Python中將字符串轉(zhuǎn)換為集合

    如何在Python中將字符串轉(zhuǎn)換為集合

    這篇文章主要介紹了如何在Python中將字符串轉(zhuǎn)換為集合,我們使用生成器表達式來迭代列表,并使用 int() 類將每個項目轉(zhuǎn)換為整數(shù),本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-03-03
  • Python如何對齊字符串

    Python如何對齊字符串

    這篇文章主要介紹了Python如何對齊字符串,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程

    Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程

    這篇文章主要介紹了Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論

安庆市| 翁牛特旗| 中方县| 巴楚县| 二连浩特市| 桃园市| 揭西县| 麦盖提县| 荣成市| 兴文县| 延安市| 梅州市| 永福县| 正镶白旗| 武平县| 莱州市| 宜黄县| 邹城市| 新民市| 镇坪县| 长阳| 泰来县| 木兰县| 黄陵县| 嘉禾县| 阿拉善左旗| 龙里县| 南雄市| 休宁县| 和林格尔县| 开封市| 沧源| 神农架林区| 固镇县| 张家口市| 平凉市| 平阴县| 黔西县| 临西县| 光泽县| 南丹县|