背景: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()
