Эти хеши не являются ASCII - причина, по которой вы видите шестнадцатеричные цифры, заключается в том, что программное обеспечение, которое вы используете для их генерации, берет двоичный вывод дайджеста и превращает его в строку шестнадцатеричных цифр ASCII.
Например, дайджест MD5 заполнит массив из 16 байтов. Вы также можете представить его как строку из 32 символов, но самой основной формой дайджеста по-прежнему является массив байтов.
Когда вы изменяете массив байтов в шестнадцатеричную строку, вам нужно 8 бит (один полный символ) для представления каждых 4 бит данных. Хотя это не так часто называют, вы могли бы сказать, что в нем используется кодировка «base16», поскольку вы захватываете 4 бита за раз и сопоставляете их с 16-символьным алфавитом.
Base64, с другой стороны, захватывает 6 битов за раз и отображает их в алфавит из 64 символов. Это означает, что вам нужно 8 битов (опять же, один полный символ) для представления каждых 6 битов данных, у которых есть половина потерянных битов base16. Строка в кодировке base16 всегда будет в два раза больше оригинала; строка в кодировке base64 будет иметь размер только четыре трети. Для хэша SHA256 base16 делает 64 байта, но base64 делает приблизительно 43.