5种Web常见编码、变换算法的自动识别

时间:2023-03-09 16:50:12
5种Web常见编码、变换算法的自动识别
#coding=utf-8

#识别字符序列变换算法,当前支持标准的MD5、SHA-1、Base64,及主流的URL编码、HTML编码

import re
import sys #MD5判断函数
def checkMD5(inStr):
MD5KeyStrs = '0123456789abcdefABCDEF'
inStr = inStr.strip() #判断MD5的时候把输入两端的空格切掉
if (len(inStr) != 16) and (len(inStr) != 32):
return False
else:
for eachChar in inStr:
if eachChar not in MD5KeyStrs:
return False
return True #SHA1判断函数
def checkSHA1(inStr):
SHA1KeyStrs = '0123456789abcdefABCDEF'
inStr = inStr.strip() #判断SHA-1的时候把输入两端的空格切掉
if len(inStr) != 40:
return False
else:
for eachChar in inStr:
if eachChar not in SHA1KeyStrs:
return False
return True #Base64判断函数
def checkBase64(inStr):
Base64KeyStrs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
inStr = inStr.strip() #判断Base64的时候把输入两端的空格切掉
if len(inStr) % 4 != 0:
return False
else:
for eachChar in inStr:
if eachChar not in Base64KeyStrs:
return False
return True #URL编码判断函数
def checkURLCode(inStr):
reURLCode = '%[0-9a-fA-F][0-9a-fA-F]' #正则表达式
reResultList = re.findall(reURLCode,inStr)
if len(reResultList) == 0:
return False
else:
return True #HTML编码判断函数
def checkHTMLCode(inStr):
htmlEncodeTuple = ('<','>','&',''','"',' ',''','/')
for each in htmlEncodeTuple:
if each in inStr:
return True
return False #总的调度函数,负责调用各个算法的判断函数
def checkInput(inStr):
if checkMD5(inStr):
resStr = 'MD5'
return resStr
if checkSHA1(inStr):
resStr = 'SHA-1'
return resStr
if checkBase64(inStr):
resStr = 'Base64'
return resStr
if checkURLCode(inStr): # 考虑到 URL编码 与 HTML编码可能会同时出现
resStr = 'URLCode'
if checkHTMLCode(inStr):
resStr = 'URLCode + HTMLCode'
return resStr
else:
return resStr
if checkHTMLCode(inStr):
resStr = 'HTMLCode'
return resStr resStr = 'UnKnown'
return resStr #Python主程序 if __name__ == '__main__': if len(sys.argv) > 1: #接受命令行输入
inputStr = str(sys.argv[1])
resultStr = checkInput(inputStr)
print u'你的输入为:'.encode('gb2312') + inputStr
print u'判断结果为:'.encode('gb2312') + resultStr else: #交互界面
print '---------------------------------------------------------------------'
print u'--------- 识别密文变换算法 WhatCodeS V1.0 ----------'.encode('gb2312')
print u'--- 当前支持识别MD5、SHA-1、Base64、URL编码、HTML编码 -----'.encode('gb2312')
print u'-- 支持交互操作与命令行操作(命令行不支持直接输入特殊字符) --'.encode('gb2312')
print '---------------------------------------------------------------------'
print while(True): inputStr = raw_input(u'请输入字符序列(输入‘q’退出程序):'.encode('gb2312'))
if inputStr == 'q':
break
elif inputStr == '':
continue
else:
resultStr = checkInput(inputStr)
print u'你的输入为:'.encode('gb2312') + inputStr
print u'判断结果为:'.encode('gb2312') + resultStr
print