背景: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()
时间: 2024-10-19 11:03:02