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
时间: 2025-01-13 12:36:05

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

Python全栈开发之5、几种常见的排序算法以及collections模块提供的数据结构

在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习,说不定以后哪天面试正好用上,文章后半段则介绍一下collections模块,因为这个模块相对于python提供的基本数据结构(list,tuple,dict)不被人们所熟悉,但是如果你对他们了解的话,用起来也是非常方便高效的. 排序算法 一.冒泡排序(BubbleSort) 步骤: 比较相邻的元素,如果第一个比第二个大,就交换他们两个. 循环一遍后,最大的数就“浮”到了列表最后的位置. 将剩下的数再次

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

常见的三种Web服务架构

常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing Architectures 我们已经给出了“不同Web服务会有不同做法”的两个主要问题,现在要据此对不同风格的Web服务进行分类了.根据我的研究,常见的Web服务架构主要有三种:REST式架构.RPC式架构和REST-RPC混合架构.下面依次对它们进行介绍. REST式.面向资源的架构 RESTf

Java中常见的5种WEB服务器介绍

这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的Web服务器,比较常用的有Tomcat.Resin.JBoss.WebSphere 和 WebLogic 等,下面将分别进行介绍. Tomc

Java web中常见编码乱码问题(二)

根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析:   2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码,应该先检测系统编码是什么样的,看看是否支持中文编码的字符集. System.out.println(System.getProperty("file.encoding")); a1.如果是不支持中文的就要设置jvm编码了,设置方法: Windows环境就在catalina.bat配置: s

几种常见的排序算法

1.插入类排序 在一个已经有序的序列中,插入一个新的记录.有直接插入排序.折半插入排序.希尔排序. 插入类排序 直接插入排序 1 void InsertSort(int R[], int n) 2 { 3 int i, j; 4 int temp; 5 for (i = 1; i < n; ++i) 6 { 7 temp = R[i]; 8 j = i - 1; 9 while (j >= 0 && temp < R[j]) 10 { 11 R[j+1] = R[j];

二十八、带给我们一种新的编码思路——EFW框架CS系统开发中的MVC模式探讨

回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://pan.baidu.com/s/1eQCc69G       前言:记得最初写出Winform版MVC的代码是在公司的一个产品中,产品有几个界面功能比较多,一个界面窗体的代码尽然有1万多行代码,让我们在维护这几个界面的时候非常的痛苦,你可能想可以把这个大的界面拆分成几个小的界面在集成在一起不就好了,但实际上这样

探究Web常用编码

今天呢,小编决定带着6个方面一路探究Web编码. 1.问:为啥要编码? 答:计算机存储信息的最小单位是1字节(bit),然而一个字节最多能表示0-255个符号,但是人类自然语言中的符号又那么多,像汉语.韩语.日语等一个字节怎么能表示的过来,所以必须要有一个新的结构字符来编码. 2.常见的编码格式有哪些? A.ASCII码总共128个,使用一个字节的低7位表示,0-31是控制字符如:换行.回车.删除等:32-126是打印字符,可以通过键盘的输入打印出来.如: System.err.println(

数据结构之常见的排序算法c语言实现

常见的简单排序算法有冒泡排序.选择排序.插入排序.快排.堆排序.归并排序.希尔排序等,这些排序的理论在网上有很多,这就只给出常见的排序算法源码,上学时候写的,不足之处欢迎大家指正. 下面几种排序的主函数入口为:     int main(int argc, char* argv[])         {      int i, len;      int a[] = {8,5,6,4,9,10,3,15,2,17};           len = (sizeof(a) / sizeof(a[0