Browse Source

use md5 instead of sha256; #178

auth
clowwindy 10 years ago
parent
commit
1044358a6b
  1. 2
      .travis.yml
  2. 12
      shadowsocks/encrypt.py
  3. 9
      shadowsocks/encrypt_rc4_md5.py
  4. 2
      tests/rc4-md5.json

2
.travis.yml

@ -15,7 +15,7 @@ script:
- pep8 . - pep8 .
- python tests/test.py -c tests/table.json - python tests/test.py -c tests/table.json
- python tests/test.py -c tests/aes.json - python tests/test.py -c tests/aes.json
- python tests/test.py -c tests/rc4-sha256.json - python tests/test.py -c tests/rc4-md5.json
- python tests/test.py -c tests/salsa20.json - python tests/test.py -c tests/salsa20.json
- python tests/test.py -c tests/server-multi-ports.json - python tests/test.py -c tests/server-multi-ports.json
- python tests/test.py -c tests/server-multi-passwd.json - python tests/test.py -c tests/server-multi-passwd.json

12
shadowsocks/encrypt.py

@ -27,7 +27,7 @@ import string
import struct import struct
import logging import logging
import encrypt_salsa20 import encrypt_salsa20
import encrypt_rc4_sha256 import encrypt_rc4_md5
def random_string(length): def random_string(length):
@ -116,7 +116,7 @@ method_supported = {
'idea-cfb': (16, 8), 'idea-cfb': (16, 8),
'rc2-cfb': (16, 8), 'rc2-cfb': (16, 8),
'rc4': (16, 0), 'rc4': (16, 0),
'rc4-sha256': (32, 16), 'rc4-md5': (16, 16),
'seed-cfb': (16, 16), 'seed-cfb': (16, 16),
'salsa20-ctr': (32, 8), 'salsa20-ctr': (32, 8),
} }
@ -160,8 +160,8 @@ class Encryptor(object):
self.cipher_iv = iv[:m[1]] self.cipher_iv = iv[:m[1]]
if method == 'salsa20-ctr': if method == 'salsa20-ctr':
return encrypt_salsa20.Salsa20Cipher(method, key, iv, op) return encrypt_salsa20.Salsa20Cipher(method, key, iv, op)
elif method == 'rc4-sha256': elif method == 'rc4-md5':
return encrypt_rc4_sha256.create_cipher(method, key, iv, op) return encrypt_rc4_md5.create_cipher(method, key, iv, op)
else: else:
import M2Crypto.EVP import M2Crypto.EVP
return M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv, return M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv,
@ -223,8 +223,8 @@ def encrypt_all(password, method, op, data):
data = data[iv_len:] data = data[iv_len:]
if method == 'salsa20-ctr': if method == 'salsa20-ctr':
cipher = encrypt_salsa20.Salsa20Cipher(method, key, iv, op) cipher = encrypt_salsa20.Salsa20Cipher(method, key, iv, op)
elif method == 'rc4-sha256': elif method == 'rc4-md5':
cipher = encrypt_rc4_sha256.create_cipher(method, key, iv, op) cipher = encrypt_rc4_md5.create_cipher(method, key, iv, op)
else: else:
cipher = M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv, cipher = M2Crypto.EVP.Cipher(method.replace('-', '_'), key, iv,
op, key_as_bytes=0, d='md5', op, key_as_bytes=0, d='md5',

9
shadowsocks/encrypt_rc4_sha256.py → shadowsocks/encrypt_rc4_md5.py

@ -25,10 +25,11 @@ import hashlib
def create_cipher(alg, key, iv, op, key_as_bytes=0, d=None, salt=None, def create_cipher(alg, key, iv, op, key_as_bytes=0, d=None, salt=None,
i=1, padding=1): i=1, padding=1):
sha256 = hashlib.sha256() md5 = hashlib.md5()
sha256.update(key) md5.update(key)
sha256.update(iv) md5.update(iv)
rc4_key = sha256.digest() rc4_key = md5.digest()
print len(rc4_key)
import M2Crypto.EVP import M2Crypto.EVP
return M2Crypto.EVP.Cipher('rc4', rc4_key, '', op, key_as_bytes=0, return M2Crypto.EVP.Cipher('rc4', rc4_key, '', op, key_as_bytes=0,

2
tests/rc4-sha256.json → tests/rc4-md5.json

@ -4,7 +4,7 @@
"local_port":1081, "local_port":1081,
"password":"aes_password", "password":"aes_password",
"timeout":60, "timeout":60,
"method":"rc4-sha256", "method":"rc4-md5",
"local_address":"127.0.0.1", "local_address":"127.0.0.1",
"fast_open":false "fast_open":false
} }
Loading…
Cancel
Save