unix破解机

1.黑客会下载好数据库中已经被hash加密后的口令文件

2.黑客用字典+salt加密的形式加密后与口令文件进行对比,相同则说明找到正确口令

import crypt
#通过规律得到加密口令的前两位就是salt值,那么通过crypt加密,将加密后的值与文件中的值进行比较
#程序设计方法:运用testPass函数,实现比较的功能
#           在main函数中读取相应的加密口令传入testPass进行再加密和比较
def testPass(cryptPass):
    salt = crypt[0:2]
    dicFile = open('dictionary.txt','r')
    for word in dicFile.readline():
        word = word.strip('\n')
        cryptWord = crypt.crypt(word,salt)
        if (cryptWord == cryptPass):
            print("Found password:" + "word" + '\n')
            return

def main():
    passFile = open('password.txt')
    for password in passFile.readline():
        if ":" in password:
            user = password.strip(':')[0]
            password = password.strip(':')[1]
            testPass(password)

if __name__ == "__main" :
    main()

哈希函数的引入:

哈希函数将一些数据作为输入,并为输入数据生成固定长度的输出(称为哈希摘要)。然而,这个输出应该满足一些有用的条件。

1. 均匀分布: 由于输出哈希摘要的长度是固定的,输入大小可能会有所不同,因此很明显,对于不同的输入值,将会得到一些输出值。即使是这样,哈希函数也应该是这样的:对于任何输入值,每个可能的输出值都应该是等可能的。也就是说,对于任何给定的输入值,每个可能的输出都有相同的可能性产生。

2. 固定长度: 这应该是不言自明的。输出值都应该是固定长度的。例如,哈希函数的输出大小可以是20个字符,也可以是12个字符,等等。SHA-512的输出大小可以是512位。

3. 意见冲突: 简单地说,这意味着不存在任何不可能找到两个不同的输入哈希函数,导致相同的输出(哈希摘要)。

 

SALT值补充:

SALT值属于随机值。用户注册时,系统用来和用户密码进行组合而生成的随机数值,称作salt值,通称为加盐值。

1、背景:系统通常把用户的密码如MD5加密后,以密文形式保存在数据库中,来防止黑客偷窥。
2、产生:随着对MD5密文查询工具的出现,而很多用户的密码又设置简单,单纯的对用户密码进行MD5加密后保存,用密文很容易就能反查询得到某用户的密码。
3、原理:为用户密码添加Salt值,使得加密的得到的密文更加冷僻,不宜查询。即使黑客有密文查询到的值,也是加了salt值的密码,而非用户设置的密码。salt值是随机生成的一组字符串,可以包括随机的大小写字母、数字、字符,位数可以根据要求而不一样。
4、用途:当用户首次提供密码时(通常是注册时),由系统自动添加随机生成的salt值,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的加盐值,然后散列,再比较散列值,已确定密码是否正确。
5、其它:经过添加salt值处理的密码,即使用户设置的原密码是相通的,数据库中的密文却是不同的。
 
引:
单向散列加密
                               salt
                                |
                                V                
-----明文---->  单向散列算法 ----->密文
 
为了加强单向散列计算的安全性,会给散列算法加点盐(salt),salt相当于加密的密钥,增加破解的难度。常用的单向散列算法有MD5、SHA等。
单向散列算法还有一个特点就是输入的任何微小变化都会导致输出的完全不同,这个特性有时也会被用来生成信息摘要、计算具有高离散程度的随机数等用途。
 
 
 

 

posted @ 2021-08-27 13:25  Lzwhehe  阅读(75)  评论(0)    收藏  举报