Эквивалентный из String.getBytes Java () в Unix Shell (Cygwin)

Это настраивающееся*, но, по умолчанию, "sudo" просит у Вас Ваш пароль. Это просто пытается удостовериться, что это - Вы, не кто-то использующий Вашу клавиатуру, в то время как Вы получали кофе.

В отличие от этого, "su корень" просите Вы пароль root.


*Если targetpw в/etc/sudoers является ложью (значение по умолчанию), "sudo" просит у Вас Ваш пароль. Если это верно, то "sudo" просит у Вас пароль корня или при определении некоторого другого пользователя с "-u" опцией, паролем того пользователя.

2
23.01.2015, 16:56
1 ответ

openssl stdin представляет собой поток байтов.

Содержимое $ user представляет собой последовательность байтов, отличных от 0 (которые могут образовывать или не формировать допустимые символы в UTF-8 или другом наборе / кодировке символов).

printf% s "$ user" stdout - это поток байтов.

printf %s "$user" | openssl dgst -sha256 –binary

Соединит стандартный вывод printf со стандартным вводом openssl . Стандартный вывод openssl - это еще один поток байтов.

Теперь, если вы вводите $ user от пользователя с терминала, пользователь будет вводить его, нажимая клавиши на своей клавиатуре. Терминал отправит соответствующие символы (как написано на этикетке ключа), закодированные в настроенном наборе символов. Обычно этот набор символов будет основан на наборе символов в текущей локали. Вы можете узнать, что это такое, с помощью карты символов локали .

Например, с таким языковым стандартом, как fr_FR.iso885915@euro , и xterm , запущенным в этом языковом стандарте, charmap языкового стандарта вернет ISO -8859-15 .Если пользователь вводит stéphane в качестве имени пользователя, этот é , вероятно, будет закодирован как байт 0xe9 , потому что так он определен в ISO-8859 -15 набор символов.

Если вы хотите, чтобы этот é был закодирован как UTF-8 перед переходом в openssl , вы должны использовать iconv для преобразования этого ] 0xe9 байт в соответствующей кодировке в UTF-8 (два байта: 0xc3 0xa9 ):

IFS= read -r user # read username from stdin as a sequence of bytes
                  # assumed to be encoded from characters as per the
                  # locale's encoding
printf %s "$user" |
  iconv -t utf-8 | # convert from locale encoding to UTF-8
  openssl dgst -sha256 –binary 
4
27.01.2020, 22:00

Теги

Похожие вопросы