Путаница по поводу кодирования / декодирования строк в Dart - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь преобразовать код Python в дротик.Он состоит из двух частей.Это первое:

passw = (salt + password).encode('utf8')
ha = base64.b64encode(hashlib.sha512(passw).digest())
return ha.decode('utf8')

И это второе:

l2 = hashlib.sha512((hash_level_1 + date).encode('utf8')).digest()
return base64.urlsafe_b64encode(l2).decode('utf8')

Однако я застрял при реализации первого бита кода Python.В настоящее время у меня есть этот код:

var passw = utf8.encode(computedSalt + password);
var sha512 = pointycastle.Digest("SHA-512");
var result = base64.encode(sha512.process(passw));
_key = utf8.decode(result);

Но это не работает, потому что base64.encode предоставляет строку, а utf8.decode ожидает байты.Как мне перевести код Python в дартс?И во что превращаются последние две строки первого кода на Python?Я запутался в системе преобразования и не уверен, что делать.

1 Ответ

0 голосов
/ 12 декабря 2018

Я исправил это.

var passw = utf8.encode(computedSalt + password);
var sha512 = pointycastle.Digest("SHA-512");
var result = base64.encode(sha512.process(passw));
return result;

и

var result = sha512.process(utf8.encode(_key + date));
return base64.encode(result)

сотворили магию.

В первом коде passw в байтовом формате, закодированный через utf8.Затем я хеширую его с помощью sha512 и кодирую в base64.Дополнительный вызов в коде Python (ha.decode('utf8')) не был необходим в дротике.

Во втором блоке кода в основном совпадает с первым.Тем не менее, в некоторых случаях Python, кажется, кодирует base64 немного по-другому - это, вероятно, вариант urlsafe.Я временно решил ее, заменив + на - и / на _ в результате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...