• 【Python脚本进阶】1.3、第一个脚本:UNIX口令破解机


    目录

    一、简介:

    1.1、概述:

    1.2、crypt:

    二、示例:

    2.1、示例1:

    2.2、示例2:

    思路:

    main()函数

    testPass()函数

    2.3、注:

    split():

    2.4、总结:


    一、简介:

    1.1、概述:

    编写UNIX口令破解机时,需使用UNIX计算口令hash的crypt()算法

    The crypt module is not supported on Windows(Windows不支持crypt模块)

    1.2、crypt:

    crypt.crypt(word, salt=None)

    验证 Unix 口令的函数


    启动Python 解释器,Python 标准库中已自带有crypt 库。要计算一个加密的UNIX 口令hash, 只需调用函数crypt.crypt(), 并将口令和salt作为参数传递给它。该函数会以字符串形式返回口令的hash



    二、示例:

    2.1、示例1:

    明文是单词egg 和salt 就是开头的两个字节是HX

    使用crypt()函数快速计算口令的hash。将库导入之后, 我们将口令“ egg" 与salt"HX"传递给函数。该函数返回口令的hash一一字符串为“ HX9LLTdc/jiDE" 。

    1. >>> import crypt
    2. >>> crypt.crypt("egg","HX")
    3. 'HX9LLTdc/jiDE'

    2.2、示例2:

    思路:

    可以编写一个程序来遍历整个字典, 将每一个单词加上指定的salt 的计算结果都与加密的口令hash 做比较

    首先要创建两个函数: main 和testpass。根据各自特定的作用, 将程序分隔成相互独立的函数,便于重用代码,易于阅读。


    main()函数

    用main 函数打开加密口令文件” password.txt", 并逐行读取口令文件中的内容。每一行中的用户名和口令hash 都是分隔开的。对每个口令hash, main 函数都调用testPass()函数, 尝试用字典中的单词破解它。


    testPass()函数

    testPass()函数会以参数形式获得加密的口令hash, 并在找到密码或搜遍字典无果后返回。要注意的是, 该函数首先将加密的口令hash 的前两个字符视为salt, 并提取出来。然后, 它打开字典并遍历字典中的每个单词, 用每个单词和salt 计算一个新的加密口令hash。

    如果计算结果与我们加密口令hash 匹配, 函数会打印一条消息显示找到密码, 并返回。否
    则, 它会在词库中继续对每个单词进行测试。

    1. import crypt
    2. def testPass(cryptPass):
    3. salt = cryptPass[0:2]
    4. dictFile = open ('dictionary.txt', 'r')
    5. for word in dictFile.readlines():
    6. word = word.strip( '\n' )
    7. cryptWord = crypt.crypt(word, salt)
    8. if cryptWord==cryptPass:
    9. print("Found Password: " + word + "\n")
    10. print("Password Not Found.\n")
    11. def main():
    12. passFile = open('passwords. txt')
    13. for line in passFile.readlines():
    14. if ":" in line:
    15. user = line.split(':')[0]
    16. cryptPass = line.split(':')[1].strip(' ')
    17. print("Cracking Password For: " + user)
    18. testPass(cryptPass)
    19. if __name__ == '__main__':
    20. main()

    2.3、注:

    split():

    简介:

    通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串

    语法:

    str.split(str="", num=string.count(str)).

    str -- 分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。

    num -- 分割次数。默认为 -1, 即分隔所有。

    返回分割后的字符串列表。

    2.4、总结:

    (root) 一般是使用了我们字典之外的作为口令


    基于*Nix 的现代操作系统中,/etc/shadow 文件中存储了口令的hash, 并能使用更多安
    全的hash 算法


    依此类推,根据python库中的安全算法,破解其他的加密算法

  • 相关阅读:
    【Python】python常用用法细节(1)
    21-关键帧动画
    如何使用JavaScript实现多语言处理
    Day 01 python学习笔记
    广西联合开展小额贷款公司联合检查,时间为9月11日-10月20日
    Kubernetes 理解kubectl/调试
    TortoiseSVN 详细操作指南
    API接口开发采集淘宝商品详情页数据优惠券sku价格销量信息等可支持高并发接入演示
    毕业设计-机器学习人眼检测活体检测-opencv
    Git 常用命令汇总
  • 原文地址:https://blog.csdn.net/qq_53079406/article/details/126008429