python
  • c
  • scrypt
  • 2017-02-15 7 views 0 likes 
    0

    Я пытаюсь перенести скрипт 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 в том же формате.

    +0

    Почему бы не кодировать его как ASCII? Есть ли шанс, что пароль будет содержать любые символы без ascii? –

    +0

    Я думаю, что программное обеспечение python должно поддерживать unicode, поэтому это не ascii. – 01BTC10

    +0

    Поскольку это пароль, вы можете ограничить его только ascii. –

    ответ

    0

    Я нашел решение, вдохновленное от: Create UTF-16 string from char*

    size_t uint8_t_UTF_16(uint8_t *input, uint8_t *output, size_t inlen) { 
        size_t outlen = 0.0; 
    
        for (size_t i = 0; i < inlen; i++) { 
        if (isascii(input[i])) { 
         output[i] = 0; 
         output[i + 1] = input[i/2]; 
         i++; 
         outlen += 2; 
        } else { 
         output[i] = input[i]; 
         outlen += 0.5; 
        } 
        } 
    
        return outlen; 
    } 
    

    Это делает работу, но я не уверен, что это решение является безопасным.

     Смежные вопросы

    • Нет связанных вопросов^_^