Cocos2dx网络(一)环境&加密解密

时间:2021-12-18 21:48:11

因为只是想学习一下基础,所以就找找免费的好了,阿里云、腾讯云之类的服务器都是要money的,免费建站的又一堆其他信息。找了半天决定使用新浪云http://sae.sina.com.cn/ 支持php、python、java,除了环境搭建不那么*,其他的限制基本没有,而且刚好三种语言都有所了解。就决定用它了。

以前用过python+django做过课程设计,刚好sae也刚好支持,果断就决定用它了。可以在本地建好项目再用svn提交到sae。django环境搭建见另一篇博文。

其它不多说,仿照公司主程写的联网,首先要解决的就是数据的加密解密。直接贴代码:

 1 import hashlib
 2 import base64
 3 
 4 #XXTEA加密解密 from http://www.thinksaas.cn/group/topic/126492/
 5 _DELTA = 0x9E3779B9 
 6 def _long2str(v, w):  
 7     n = (len(v) - 1) << 2  
 8     if w:  
 9         m = v[-1]  
10         if (m < n - 3) or (m > n): return ''  
11         n = m  
12     s = struct.pack('<%iL' % len(v), *v)  
13     return s[0:n] if w else s  
14 
15 def _str2long(s, w):  
16     n = len(s)  
17     m = (4 - (n & 3) & 3) + n  
18     s = s.ljust(m, "\0")  
19     v = list(struct.unpack('<%iL' % (m >> 2), s))  
20     if w: v.append(n)  
21     return v  
22 
23 def encryptXXTEA(mystr, key):  
24     if mystr == '': return mystr  
25     v = _str2long(mystr, True)  
26     k = _str2long(key.ljust(16, "\0"), False)  
27     n = len(v) - 1  
28     z = v[n]  
29     y = v[0]  
30     sum = 0  
31     q = 6 + 52 // (n + 1)  
32     while q > 0:  
33         sum = (sum + _DELTA) & 0xffffffff  
34         e = sum >> 2 & 3  
35         for p in xrange(n):  
36             y = v[p + 1]  
37             v[p] = (v[p] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
38             z = v[p]  
39         y = v[0]  
40         v[n] = (v[n] + ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[n & 3 ^ e] ^ z))) & 0xffffffff  
41         z = v[n]  
42         q -= 1  
43     return _long2str(v, False)  
44 
45 def decryptXXTEA(mystr, key):  
46     if mystr == '': return mystr  
47     v = _str2long(mystr, False)  
48     k = _str2long(key.ljust(16, "\0"), False)  
49     n = len(v) - 1  
50     z = v[n]  
51     y = v[0]  
52     q = 6 + 52 // (n + 1)  
53     sum = (q * _DELTA) & 0xffffffff  
54     while (sum != 0):  
55         e = sum >> 2 & 3  
56         for p in xrange(n, 0, -1):  
57             z = v[p - 1]  
58             v[p] = (v[p] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z))) & 0xffffffff  
59             y = v[p]  
60         z = v[n]  
61         v[0] = (v[0] - ((z >> 5 ^ y << 2) + (y >> 3 ^ z << 4) ^ (sum ^ y) + (k[0 & 3 ^ e] ^ z))) & 0xffffffff  
62         y = v[0]  
63         sum = (sum - _DELTA) & 0xffffffff  
64     return _long2str(v, True)  
65 
66 class crypto:
67     def __init__(self):
68         #可以使用随机密码生成器
69         self.key="KSaY0eL6o5uHiDk"
70 
71     #tab是字典
72     def encrypt(self, tab):
73         #先转成字符串
74         mystr = str(tab)
75         #XXTEA加密
76         ciphertext = encryptXXTEA(mystr, self.key)
77         #base64加密
78         base64text = base64.encodestring(ciphertext).strip()
79         #md5字符串用以验证
80         md5text = hashlib.md5(base64text).hexdigest()
81         #组合字符串
82         totaltext = md5text + "$" + base64text
83         return totaltext
84 
85     def decrypt(self, text):
86         strlist = text.split('$')
87         md5text = hashlib.md5(strlist[1]).hexdigest()
88         if md5text == strlist[0]:
89             base64text = base64.decodestring(strlist[1])
90             ciphertext = decryptXXTEA(base64text, self.key)
91             return eval(ciphertext)
92         else:
93             return {"status":-5}   #md5不相同返回状态-5