#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

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

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

    转载请注明出处http://www.cnblogs.com/Wxtrkbc/p/5492298.html 在面试中,经常会遇到一些考排序算法的题,在这里,我就简单了列举了几种最常见的排序算法供大家学习 ...

  2. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

  3. 常见的三种Web服务架构

    常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...

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

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...

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

    根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析:   2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...

  6. JS中几种常见的数组算法(前端面试必看)

    JS中几种常见的数组算法 1.将稀疏数组变成不稀疏数组 /** * 稀疏数组 变为 不稀疏数组 * @params array arr 稀疏数组 * @return array 不稀疏的数组 */ f ...

  7. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  8. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  9. 用php实现四种常见的排序算法

    几种常见的排序 排序是一个程序员的基本功,对于初级phper,更是可以通过排序算法来锻炼自己的思维能力. 所谓排序,就是对一组数据,按照某个顺序排列的过程.下面就总结四种常用的php排序算法,分别是冒 ...

随机推荐

  1. 编程书籍分享--pdf

    作为程序员,我觉得我们应该多学习.多思考.多分享. 今天就花费了一点时间把这几年搜集的编程资料上传到了网上做个分享, 其中涵盖.net .java.js.html5.css3.mysql.sqlser ...

  2. iOS -一些常用的方法

    1.获取本地的语言 + (NSString *)getLocalLanguage { NSString *language = [[[NSUserDefaults standardUserDefaul ...

  3. Js处理json数据

    js中处理由ajax调用返回的json数据问题,可以通过使用JSON.parse方法将json字符串转化成javascript 对象.通过对象访问属性值. JSON.parse 只限于高版本的浏览器. ...

  4. python学习之”迭代从入门到精通“

    在开发的过程中,假如给你一个list或者tuple,我们可以通过for循环来遍历这个list或者tuple,这种遍历我们成为迭代(Iteration).在Python中,迭代是通过for ... in ...

  5. Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flas

    转自Ubuntu 14.04安装Chromium浏览器并添加Flash插件Pepper Flash Player Chromium谷歌的开源浏览器将不再支持Netscape浏览器插件API,Adobe ...

  6. QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)

    QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...

  7. CF 33B String Problem

    对每个位置进行操作,求出最终变成相同字母的代价,然后把所有的位上代价加起来,使得总代价最小.res[i][j]表示将字母i+'a'和字母j+'a'变为相同的代价,设最终都变成字母k+'a',那么res ...

  8. USB OTG

    OTG检测的原理是:USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时设备 ...

  9. python3使用requests爬取新浪热门微博

    微博登录的实现代码来源:https://gist.github.com/mrluanma/3621775 相关环境 使用的python3.4,发现配置好环境后可以直接使用pip easy_instal ...

  10. Android代码中使用Ping命令

    项目中需要搜索同一WIFI局域网中的设备并进行通信,暂时想到的办法是得到局域网网段的地址,因为同一局域网中的IP地址前三位是相同的,而第四位的范围从0~250,所以对第四位进行遍历搜索,能ping通的 ...