rot13是什么?它是一种很好玩的编码技术。可以参考[wiki](https://en.wikipedia.org/wiki/ROT13)。其实我更想叫它“加密”,不过因为它太容易破解了,所以我还是自己这么叫它吧。
原理
rot13,展开说就是“rotate by 13 places”,也就是向后移动13个位置。我们都知道,英文字母一共有26个。如果你把它们想象成一个圈圈,让a和z手拉着手,此时从a往后数13个,就是n;那么从n再往后数13个,就又回到了a。也就是说,rot13可以让你对一段话中的每个英文字母都往后移动13个,从而达到编码(加密)的效果。
栗子
hello
经过rot13编码后就是 uryyb
。乍一看uryyb,这是神马玩意?你看不懂,自然就是加密了。但是有人再用rot13编码一遍,就把uryyb
变回了hello
。
实现
在StackOverflow上找到了Python内置的办法:http://stackoverflow.com/a/3270252/5769598。有了核心代码,剩下的工作就是写个app.yaml
和rot13cipher.py
,然后按照我之前那篇文章把代码上传到GAE服务器就可以了。
app.yaml
中的代码:
1
2
3
4
5
6
7
8
9
10
<code>application: udacitywebdevelopment-149320
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
script: rot13cipher.app
</code>
rot13cipher.py
的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<code>import webapp2
import cgi
import codecs
# build a simple html form
form = """
<form method="post">
<h1 style="color: green">Let's use rot13 cipher!</h1>
<textarea name="text" rows="8" cols="40">%(text)s</textarea>
<input type="submit">
</form>
"""
# build a function that make the special characters into character entities, such like "&" -- "&"
def escape_html(s):
return cgi.escape(s, quote = True)
class MainPage(webapp2.RequestHandler):
def write_form(self, text=""):
self.response.out.write(form % {'text': escape_html(text)})
def get(self):
self.write_form()
def post(self):
user_text = self.request.get('text')
# 'ignore' is to ignore Chinese characters
translated_text = codecs.encode(user_text, 'rot_13', 'ignore')
self.write_form(translated_text)
app = webapp2.WSGIApplication([
('/', MainPage),
], debug=True)
</code>
其中,codecs.encode
就内置了rot13的编码技术。在测试的过程中,我发现如果输入中文的话,服务器就500错误了。于是查阅了Python文档,使用了ignore
,使得服务器将中文字符忽略掉。虽然不是最好的方法,但是基本功能还是满足了。毕竟,rot13就是针对英文的,中文本来也就没法用,哈哈。