LINUX.ORG.RU

[C] unicode и sha256


0

0

Разбираю код revelation(http://oss.codepoet.no/revelation/) с целью написания консолькой версии на си.

Участок из мануала: The user must supply a password, encoded as UTF-8. It is concatenated with a randomly generated 256-bit salt, and then hashed a number of times (10 000 is recommended) using the SHA-256 algoriyhm. A pseudo-code example of this process:

password = get_password() salt = sha256_digest(random_string(32)) key = password + salt

for i = 0 to 10000 key = sha256_digest(key)

Вопрос такой: как видно, пароль должен быть в unicode, в то время как salt - это просто массив из 32 байтов. Как в си грамотно получить хеш их суммы? пробовал через libgcrypt, но там поддержки unicode замечено не было, и я не у верен в корректности результата. Проверить не могу, так как там еще расшифровывать дальше надо, пока безрезультатно.

Заранее благодарен за ответы.


Re: [C] unicode и sha256

Так и текст в UTF-8 - это просто массив байт.
Более того, если в конце текста стоит символ с кодом 0, то это
нормальная нультерминированная строка, с которой прекрасно работают
многие функции, ничего не знающие о юникоде.
Естественно, это всё, если тебе не нужна сортировка строк или там перестановка символов в строке.

romanSA ()

Re: [C] unicode и sha256

А по-твоему, `password, encoded as UTF-8' - не `просто массив из N байтов'?

AMDmi3 ()
Ответ на: Re: [C] unicode и sha256 от AMDmi3

Re: [C] unicode и sha256

Ну да, работаю именно в таком предположении. Вся фигня в том, что тут до получения проверяемого результата надо сделать несколько шагов(дешифровка, декомпрессия) и заюзать насколько библиотек, а я начал с си работать совсем недавно, поэтому боязно все это :)

can3p ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.