Как я могу ввести строку переменной длины и вывести строку определенной пользователем длины? - PullRequest
2 голосов
/ 21 мая 2019

Поскольку некоторые функции, такие как MD5, могут принимать ввод строки / байтового массива переменной длины и выводить байтовый массив значения фиксированной длины (т. Е. В шестнадцатеричном формате).Мне нужна стандартная функция, которая может вводить строку / байтовый массив переменной длины и выводить байтовый массив / строку определенной пользователем длины.Есть ли способ сделать это?

Ответы [ 2 ]

1 голос
/ 21 мая 2019

Вы можете использовать функцию расширяемого вывода (XOF), например SHAKE-128 / SHAKE-256, определенную в NIST.FIPS-202 .

В c может реализовывать SHAKE-128 и может вызывать main () как:

shake128(0,shake_key,&shake_context);        //set key for shake
shake128(output_len, output_var, &shake_context) //hash function

Вместо создания дайджеста фиксированной длины (например, как MD5 / SHA-2/256), онможет производить выходные данные любой требуемой длины.

0 голосов
/ 21 мая 2019

Да, это вполне возможно.Вот шаблон:

char *foo(const char *input, size_t output_length) {
    size_t input_length = strlen(input);
    char *ret = malloc(input_length + 1);
    if(!ret) 
        return NULL;

    /* Custom code here. Maybe something like this:
       for(size_t i; i<input_length; i++) {
           ret[i] = 
    */

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