背景:java写的非标加密算法,测试时执行java工程进行解密测试,很不方便。

目的:想写个web页面,使得任何测试人员都可以在输入加密串时得到解密后字段,方便日志查询及字段核对。(额,算法部分就不写了。)

步骤:由于内部使用的是非标Base64加密算法,所以我该次操作分为3个部分,以下具体介绍并附带python代码

1 将java的非标加密算法转为python

2 使用python的tornado调用该算法

3 编写html页面,简单明了

一 java非标加密算法转为python  dncrypte.py

#-*- coding:utf-8 -*-
import array
#该部分设置字符对应规则,后续解密部分使用它来做对应
BASE64CHAR=[****]
...
def dncryped(string):
#定义数组,用来存放解密后的字符,outlen为数组长度
outbyte=[0 for j in range(outlen)]
#解密规则及算法,得到解密后的outbyte数组
return ''.join(outbyte)
#print dncryped("FMK60hD") 测试部分

问题:python中提供的数据类型远少于java,但是它提供了转化功能。比如'ord'将字符对应到ascii码,'chr'将ascii码对应到字符,可在做位于时使用。返回是使用了''.join(outbyte),是因为outbyte中存储的ascii码,所以将其转化为对应的字符数组。

二 使用python的tornado调用该算法  test.py

# -*- coding:utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from dncrypte import * #引入自己的方法
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler):
def get(self):
encry=self.get_argument('Encrypted', 'Hello')
Encrypted=dncryped(encry) #调用解密方法
self.write(Encrypted)
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

启动:python test.py --port=9999

访问:ip:9999,在url后添加?/Encrypted=加密串,enter即可得到解密结果,如下:

三 编写html页面  test.html&test.py

原本到第二步即可使用了,不过在url中输入加密串总是不太方便,于是想配合html5,做一个简单页面。达到如下效果:

1 新增一个文件 test.html

<form action="http://myip:8888/?Encrypted=" method="post">
请输入加密串:<input type="text" name="word" id="word" value="" />
<input type="submit" value="提交" />
</br>
<table class="table table-bordered table-condensed table-responsive">
{{result}}
</table>
</br>
</form>

2 需要改动原来的test.py

# -*- coding:utf-8 -*-
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from dncrypte import * #引入自己的方法
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler):
def get(self):
result = ""
Encrypted = ""
self.render('test.html',**getlocals(locals()))
def post(self):
encry=self.get_argument('Encrypted', 'Hello')
result = dncryped(encry)
self.render('test.html',**getlocals(locals()))
def getlocals(locals):
tmpd={}
for k,v in locals.iteritems():
if k not in ['self']:
tmpd[k] = v
return tmpd
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()

【Python】使用python的tornado配合html页面示例的更多相关文章

  1. python web框架之Tornado

    说Tornado之前分享几个前端不错的网站: -- Bootstrap http://www.bootcss.com/ -- Font Awesome http://fontawesome.io/ - ...

  2. Python(九)Tornado web 框架

    一.简介 Tornado 是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本.这个 Web 框架看起来有些像web.py 或者 Google 的 webapp,不过 ...

  3. python web框架——初识tornado

    一 Tornado概述 Tornado是FriendFeed使用的可扩展的非阻塞式web框架及其相关工具的开源版本.这个Web框架看起来有些像web.py或者Google的 webapp,不过为了能有 ...

  4. Python学习笔记17—Tornado

    实例 #!/usr/bin/env Python #coding:utf-8 import tornado.httpserver import tornado.ioloop import tornad ...

  5. python爬爬爬之单网页html页面爬取

    python爬爬爬之单网页html页面爬取 作者:vpoet mail:vpoet_sir@163.com 注:随意copy 不用告诉我 #coding:utf-8 import urllib2 Re ...

  6. Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  7. Python+Selenium爬取动态加载页面(1)

    注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...

  8. Awesome Python,Python的框架集合

    Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awes ...

  9. 【python】Python 资源大全中文版

    申明:感谢原作者的整理与分享,本篇文章分享自:https://www.jianshu.com/p/9c6ae64a1bd7 GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常 ...

随机推荐

  1. Linq语句基础

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. EF当实体模型与数据库的架构不同时要删除数据库时的报错问题

    当使用的EF的时候,我们都知道EF当实体模型与数据库的架构不同时要删除数据库,这是会把错: 无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据. ...

  3. (转)关于ARM9协处理器CP15及MCR和MRC指令

    网址:http://blog.csdn.net/zhou1232006/article/details/6150198 在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的 ...

  4. 解决MS Azure 不能ping的问题

    PsPing v2.01 PsPing implements Ping functionality, TCP ping, latency and bandwidth measurement. Use ...

  5. SAX EntityResolver 的作用

    1.1 何为 EntityResolver : 官方解释: 如果SAX应用程序叙事实现自定义处理外部实体,则必须实现此接口, 并使用setEntityResolver方法向SAX 驱动器注册一个实例. ...

  6. [转载]MongoDB的$inc修改器

    MongoDB的$inc修改器相当于编程语言中的 “+=”“$inc”只能用于操作数值类型的数据,包括整数.长整数和双精度浮点数,用于其他类型的数据会导致操作失败. >db.users.find ...

  7. jquery类选择器无法取得对象问题原因

    <html> <script type="text/javascript" src="jquery-1.9.1.js"></scr ...

  8. hhtml from表单为什么能提交数据

    1.html的列表,分为list,table,form. form表单是专门用来提交数据的,即上传数据的.所以form表单默认是必须有提交按钮的,也就是必须要有个button type类型为submi ...

  9. WPF使用第三方的字体(TTF文件)

    一.准备好你要使用的字体文件,以TTF结尾的文件,然后复制到项目中,并设置Build Action(生成操作)为Resource(资源): 二.在App.xaml中或者你需要的地方添加资源的定义: & ...

  10. 面试大总结之二:Java搞定面试中的二叉树题目

    package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.L ...