python的排列组合

Python requirements:

  • itertools
  • hashlib

测试的时候可能会发现提交的数据中有类似“sign”这样的值,这个值有很多时候是作为校验存在的,同时因为是加密后的密文所以难以被猜解,那么,有一种思路是这样的,这个值是请求包中的某个值或者某几个值进行加密,作为sign,这样既方便后端的校验,也同样保证了安全性。

所以需要对这个值进行Fuzz,说不定思路就对了呢~

Usage: python test.py test.py 3

数字指定随机组合的位数,示例中的3标识,随机选取3个进行随机组合

python

#!/usr/bin/python
# -*- encoding: utf-8 -*-

# import md5
import hashlib
import itertools
from itertools import product
import sys
from termcolor import cprint
   

def permutations_md5(origin):
    try:
        md5_value =  hashlib.md5(origin).hexdigest()
        print md5_value
    except Exception as e:
        cprint('md5 error:', 'red')
        print "check your origin value."


def permutations(data, value):
    data_array = []
    for line in data:
        data_array.append(line.strip('\n'))
    data_list = list(product(data_array, repeat=int(value)))

    for i in range(len(data_list)):
        md5_origin = ''
        for ii in range(int(value)):
            md5_origin += data_list[i][ii]
        permutations_md5(md5_origin)
    cprint("\n The process is Complete!", 'green')

def main():
    path = sys.argv[1]
    random_int = sys.argv[2]
    keys = open(path, 'r')
    keys_data = keys.readlines()
    if int(random_int) > len(keys_data):
        cprint("The value is to big.", 'red')
    else:
        permutations(keys_data, random_int)


if __name__ == "__main__":
    main()