因为只是想学习一下基础,所以就找找免费的好了,阿里云、腾讯云之类的服务器都是要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