Fix encoding issues

This commit is contained in:
Colin Kuebler
2020-01-24 18:44:16 -05:00
parent 50a03c83cb
commit ce709f56ba
3 changed files with 10 additions and 10 deletions

View File

@@ -27,8 +27,8 @@ signal.signal(signal.SIGINT, exit_cleanly)
from Cryptodome.Cipher import AES
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
encrypt = lambda msg, key: AES.new(key.encode(), AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key.encode(), AES.MODE_ECB).decrypt(msg.encode()))
encrypt = lambda msg, key: AES.new(key, AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key, AES.MODE_ECB).decrypt(msg)).decode()
from base64 import b64encode
import hashlib
@@ -84,7 +84,7 @@ class JSONHandler(tornado.web.RequestHandler):
't': ts,
'success': True }
answer = jsonstr(answer)
payload = b64encode(encrypt(answer, options.secKey)).decode()
payload = b64encode(encrypt(answer, options.secKey.encode())).decode()
signature = "result=%s||t=%d||%s" % (payload, ts, options.secKey)
signature = hashlib.md5(signature.encode()).hexdigest()[8:24]
answer = {
@@ -115,7 +115,7 @@ class JSONHandler(tornado.web.RequestHandler):
print(self.request.headers)
if payload:
try:
decrypted_payload = decrypt(binascii.unhexlify(payload), options.secKey).decode()
decrypted_payload = decrypt(binascii.unhexlify(payload), options.secKey.encode())
if decrypted_payload[0] != "{":
raise ValueError("payload is not JSON")
print("payload", decrypted_payload)

View File

@@ -21,15 +21,15 @@ iot:
from Cryptodome.Cipher import AES
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
encrypt = lambda msg, key: AES.new(key.encode(), AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key.encode(), AES.MODE_ECB).decrypt(msg.encode()))
encrypt = lambda msg, key: AES.new(key, AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key, AES.MODE_ECB).decrypt(msg)).decode()
def iot_dec(message, local_key):
message_clear = decrypt(base64.b64decode(message[19:]), local_key)
message_clear = decrypt(base64.b64decode(message[19:]), local_key.encode())
print (message_clear)
return message_clear
def iot_enc(message, local_key, protocol):
messge_enc = encrypt(message, local_key)
messge_enc = encrypt(message, local_key.encode())
if protocol == "2.1":
messge_enc = base64.b64encode(messge_enc)
signature = b'data=' + messge_enc + b'||pv=' + protocol.encode() + b'||' + local_key.encode()

View File

@@ -12,8 +12,8 @@ import json
from Cryptodome.Cipher import AES
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
encrypt = lambda msg, key: AES.new(key.encode(), AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key.encode(), AES.MODE_ECB).decrypt(msg.encode()))
encrypt = lambda msg, key: AES.new(key, AES.MODE_ECB).encrypt(pad(msg).encode())
decrypt = lambda msg, key: unpad(AES.new(key, AES.MODE_ECB).decrypt(msg)).decode()
from hashlib import md5
udpkey = md5(b"yGAdlopoPVldABfn").digest()