socket网络传输加密解密

  • 自定义加密解密算法 <效率高>

    jt809协议采用如下, 加密解密为同一算法

# -*- coding: utf-8 -*-

from array import array

# 加密解密因子(大小范围要选好, 然后双方协定好)
M1 = 1 << 19
IA1 = 2 << 20
IC1 = 3 << 21

def encrypt(data, encrypt_key=1):
    """加密解密
    >>> encrypt("abc", 2)
    'kde'
    >>> encrypt("kde", 2)
    'abc'
    >>> 
    """
    raw_data = array("B", data)
    for i in xrange(len(raw_data)):
        encrypt_key = IA1 * (encrypt_key % M1) + IC1
        raw_data[i] ^= (encrypt_key >> 20 & 0xff)
    return raw_data.tostring()


if __name__ == "__main__":
    import doctest
    doctest.testmod()
    # 效率 1KB => 0.00099s, 1MB => 0.62099s

  • DES 

    先安装pyDes http://sourceforge.net/projects/pydes/files/latest/download

# -*- coding: utf-8 -*-

import pyDes as des

s = "abc"

k = des.des(key="bixu8wei", mode=des.CBC, IV="yede8wei", pad=None, padmode=des.PAD_PKCS5)
# 加密
es = k.encrypt(s)
print "Encrypted: %r" % es
# 解密 加密的k要和解密的k一样,所以要协商
ds = k.decrypt(es, padmode=des.PAD_PKCS5)
print "%r" % ds

# 效率 加密快,解密是加密耗时的300倍, 1KB以下的还行(解密0.29119s), 超过10K就很慢了

    这个也可以使用pycrypto https://www.dlitz.net/software/pycrypto/ 

  • AES

    使用pycrypto https://www.dlitz.net/software/pycrypto/ 

>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> obj2.decrypt(ciphertext)
'The answer is no'

  • SSL 这个twisted就有listenSSL, connectSSL, 先不记录太多

  • 压缩传输 zlib http://my.oschina.net/1123581321/blog/176570


你可能感兴趣的:(socket网络传输加密解密)