用户组 
易积分21
热心0
好评0
|
python RC4算法全网独家对接如意网络验证[复制链接]
本帖最后由 188224912 于 2021-2-1 21:33 编辑
加密是搞定了,无法解密中文,还有就是加密后的字符数据发给服务器,采用post还是get,对易语言门外汉,有大佬指导下吗?
- # coding=utf-8
- # python 3.7
- #####WWW.52bangqi.com
- import sys
- import binascii,base64
- def bytesToHex(bytes):
- sb = ''
- for i in range(len(bytes)):
- hexs = hex(bytes[i] & 0xFF)[2:]
- if len(hexs) < 2:
- sb += '0'
- sb += hexs
- print('sb',sb)
- return sb
- def hexToByte(inHex):
- hexlen = len(inHex)
- print(inHex)
- print(hexlen)
- result = []
- if (hexlen % 2 == 1):
- hexlen += 1
- inHex="0"+inHex
- for i in range(0, hexlen, 2):
- data=result.append(int(inHex[i:i+2],16))
- data=str(data)
- print('data',data)
- return data
- def initKey(aKey):
- state = list(range(256))
- bkey =[ord(i) for i in list(aKey)]
- index1 = 0
- index2 = 0
- if (len(bkey) == 0):
- return []
- for i in range(256):
- index2 = ((bkey[index1] & 0xff) + (state[i] & 0xff) + index2) & 0xff
- state[i], state[index2] = state[index2], state[i]
- index1 = (index1 + 1) % len(bkey)
- return state
- def RC4Base(input, mKkey):
- x = 0
- y = 0
- q = input
- j = len(input)
- key = initKey(mKkey)
- result = list(range(j))
- for i in range(j):
- x = (x + 1) & 0xff
- y = ((key[x] & 0xff) + y) & 0xff
- key[x], key[y] = key[y], key[x]
- xorIndex = ((key[x] & 0xff) + (key[y] & 0xff)) & 0xff
- result[i] = (q[i] ^ key[xorIndex])
- return result
- def encryRC4Byte(data, key, chartSet='utf-8'):
- if not chartSet:
- bData = [ord(i) for i in data.encode(chartSet)]
- print(bData)
- print( RC4Base(bData, key))
- return RC4Base(bData, key)
- else:
- bData = list(data.encode(chartSet))
- print('bdata',bData)
- print('rc4base',RC4Base(bData, key))
- return RC4Base(bData, key)
- def decryRC4(data, key, chartSet='utf-8'):
- r = RC4Base(hexToByte(data), key)
- print("r的值",type(r))
- print(r)
- print( bytes(r).decode(chartSet))
- return bytes(r).decode(chartSet)
- def encryRC4String(data, key, chartSet='utf-8'):
- print('bytestohex', bytesToHex(encryRC4Byte(data, key, chartSet)))
- print('encryRC4Byte', encryRC4Byte(data, key, chartSet))
- return bytesToHex(encryRC4Byte(data, key, chartSet))
- def rcfour(data, key, signs):
- if signs == 'encode':
- a=encryRC4String(data, key)
- print(a)
- return a
- else:
- a=decryRC4(data, key)
- return a
- if __name__ =='__main__':
- # try:
- # if choices not in ['decode', 'encode']:
- # print('usage: %s string2decode key_string decode' % sys.argv[0])
- # print(' or: %s string2encode key_string encode' % sys.argv[0])
- # exit()
- # except:
- # print('usage: %s string2decode key_string decode' % sys.argv[0])
- # print(' or: %s string2encode key_string encode' % sys.argv[0])
- # exit()
- key ='xHwsBShMjDBp3A6jSXQMhsemmPJriNp8' #"key"
- data = '56我222' #"encoded_string"
- choices='encode' # decode or encode
- # print(key)
- # a=rcfour(data,key,choices)
- # print('加密',a)
- data='31CA4D53110574'
- #
- print('============英文======')
- b=decryRC4(data,key)
- print('解密',b)
- print('============中文======')
- data='CE2A'
- #
- print('============英文======')
- b=decryRC4(data,key)
- print('解密',b)
复制代码
.[b sytle="disyplay:none"]12 |
|