Я пытаюсь перенести скрипт python, который использует scrypt для генерации пароля.Преобразование C uint8_t в python utf_16_be
import pylibscrypt
scrypt = pylibscrypt.scrypt
password = 'test123'.encode("utf_16_be", "replace")
salt = '384eaed91035763e'.decode('hex')
key = scrypt(password, salt, 16384, 8, 1, 32)
print (key.encode('hex'))
Результат должен быть: 9f2117416c7b2de9419a81c4625a28e40c16ac92aaa3000bb2c35844b3839eb1
В C, я использую libsodium crypto_pwhash_scryptsalsa208sha256_ll функцию().
Если я пытаюсь передать пароль от этой переменной:
const uint8_t password[] = "test123";
Я не получаю один и тот же ключ. Я попытался удалить ".encode (" utf_16_be "," replace ")" из скрипта python, а затем получаю тот же результат.
Итак, как я могу преобразовать переменную C в переменную так же, как и переменную python?
EDIT: Исходное программное обеспечение находится на Java и, по-видимому, кодирует строки как большой символ UTF-16. Теперь мне нужно закодировать строку C в том же формате.
Почему бы не кодировать его как ASCII? Есть ли шанс, что пароль будет содержать любые символы без ascii? –
Я думаю, что программное обеспечение python должно поддерживать unicode, поэтому это не ascii. – 01BTC10
Поскольку это пароль, вы можете ограничить его только ascii. –