Українська

Інструменти розробника · SHA калькулятор хешу

Текст, Різні SHA-256: Нові лінії, кодування та приховані Bytes

· Як працює

Опубліковано ToolAcre · Редакція журналу

шемале256 коди текст-обробка декупація

Два ідентичних заповнення текстових вводів, що виробляють різні SHA-256 перетрави, з прихованою новоюлінією та кодуванням байтів, виділених
Головна ToolAcre векторна ілюстрація

Командний рядок говорить одне, і браузер каже ще одне для того, що виглядає таким же текстом. Витягувати нові лінії, UTF-16 і CRLF пояснити практично кожен випадок; цей пост показує, як знайти приховані байти.

echo коментує один хеш, інструмент говорить ще — повсякденний невідповідний і чому ні неправильно

Термінал повідомляє про один SHA-256 засвоюється перетравлення та переробка повідомлень іншого для того, що з’являється ідентичний текст. Не зламаний інструмент, а браузер не має. Не так, навіть якщо видимі символи виглядають ідентичними. Цей пост простежує найбільш поширені джерела тих прихованих байтів і показує, як їх знайти з текстовим полем і шістнадцятковим глядачам.

Проблема практично ніколи не була SHA-256 алгоритм. SHA-256 детерміністичний: ті ж байти завжди виробляють однаковий травлення, а травлення правильно. При виході розрізняються, байти відрізняються. Згуба виникає тому, що "такий же текст" неоднозначна: людина бачить символи, але функція хешу бачить байти, а переклад між ними є де приховані відмінності приховує.

Причіпний новий рядок — як ехо припускає байт і друкарню не робить, і що робить до перетравлення

Команда echo в оболонці припускає новий характер (U+000A, tote 0x0A) до його виходу. Цей дизайн: конвенції в Unix, що текстові файли закінчуються новими файлами, що дає змогу охотититити простою роботою. Коли ви введіть echo abc в термінал і трубу його до sha256sum, засвоювані байти 61 62 63 0А (темно) ASCII коди для, б, c, і для нової лінії, не 61 62 63. Інструмент ToolAcre використовує для компute hashes має байти 61 62 63 і виробляє інший результат.

Команда Printf не додає новий рядок, якщо ви напишіть один у рядок формата. Printf abc charakty256sum комп’ютерна бава байтів 61 62 63 само, що відповідає інструменту браузера. Це чому порівняння має часто означає, що використовується друк замість луни, або для формування до гойдалки256sum з -z прапорець або вказати в будь-якій формі, який забезпечується. Прихована нова лінія - це єдиний найбільш поширений інструмент для браузера і незгодний інструмент.

UTF-8 версус UTF-16 — чому такі ж символи відрізняються байтами в деяких оболонках і редакторах

UTF-8 і UTF-16 закодувати ті ж символи, які відрізняються послідовністю байтів. Характер é (U+00E9, e з гострим акцентом) кодує як два UTF-8 байти: 0xC3 0xA9. Вступ UTF-16, що це як JavaScript внутрішнє відображення рядків, той же характер займає два байти в іншому порядку (в залежності від ендонності) або іншої форми цілком, якщо складається з основного персонажа і об'ємної позначки. Якщо ви копіюєте кафе з програми Windows і вставте його в інструмент для браузера, то інструмент має бути не відповідати якому має Mac термінал, оскільки системи, за замовчуванням, різні кодування або нормалізаційні форми.

Мистецтво ToolAcre hash tool явно перетворює текст в UTF-8 перед захопленням через текстовий конвертер. Цей самий кодування командного рядка Unix використовує за замовчуванням. Код джерела в додатках/dev/src/lib/base64.js випробувано з текстом функціїToBytes, що викликав новий TextEncoder().encode(), який гарантує UTF-8. Якщо використовується інша система UTF-16 або латинська1 або будь-яке інше кодування, байти, що виробляються, будуть відрізнятися. Інструмент відображає кількість байтів поряд з перетравленням, тому гасіння кафе та порівняння з командно-лінійним хешем покаже різні рахунки байтів, якщо кодування дивинжуть.

CRLF, BOM і нормалізація — закінчення лінії, знаки замовлення та складені versus decomposed акценти як невидимі відмінності введення

CRLF (передача кар’єру + лінія корму, байт 0x0D 0x0A) є закінченням лінії на Windows; LF (лінія подача, байт 0x0A) є конвенцією Unix. У текстовому редакторі можна здійснювати різні закінчення рядків, а ті байти є частиною входу в хеш. Файл, що відредаговано на Windows, і перевірте проти SHA-256 унікс не буде відповідати, якщо одна система перетворила закінчення лінії та інші не мають.

Оцінка за допомогою байтів (а)BOM, байт 0xEF 0xBB 0xBF для UTF-8) є додатковим послідовністю при старті файлу, який сигналує кодування. Деякі редактори додають його; деякі інструменти смуги; деякі ігнорують його. Якщо файл несе файл BOM і ви її помете BOM байти є частиною травлення. Якщо ви перерахуєте видимий текст (який переглядає перегляд) BOM з) в інструмент, який не додає BOM, травлення не будуть відповідати. Текстові форми нормалізації (текстові форми нормалізації)NFD версус NFC для складених і декомплаєнсових акцентів додайте ще один шар: той же акцентований лист може бути представлений як єдиний попередньо представлений характер або як базовий характер, який слідує поєднанням акценту, а послідовність байтів різна.

Упорядкований приклад — один рядок, який захопився і без нової лінії, потім в двох кодуваннях, з кожним по різниці парі показаний

Діагностичний метод один: використовуйте інструмент для відключення шестигранного або онлайн конвертер, щоб побачити саме те, що байти, які інструменти працюють на вашому пристрої. Вставте текст в базовий 64 конвертер, закодуйте його, і у вас є текстовий запис байтів. Потім відхиляйте base64 на командному рядку з base64 -d і труба її до od -A кс./час -t x1z, щоб побачити послідовність байтів. Якщо матч байтів, алгоритм правильність; якщо вони не мають, різниця буде видимою.

Діагностичний метод два: використання ToolAcre SHA поспішно довшийте вводи, починаючи з одного персонажа. Додати новий рядок (який означає, що введіть в поле тексту), додайте пробіли, додайте один і той же текст з UTF-16 втечу послідовність, якщо вхід вийшов з не-ASCII джерело. Перегляньте зміни травлення з кожним доповненням. Під час перетравювання, який вузьким чином вузьким чином, показує вам, скільки байтів, інструмент захоплюється, який вузьким пошуком різко.

Корпус шестигранної і білої площі в виході — відмінності, які чисто косметичні

Хвістичний уявлення про травлення є справжньою. Верхній і нижній літери як відображають однакові байти: A = 10, а = 10. Деякі інструменти виділяють верхній чохол, деякі нижній регістр, деякі дозволяють або. Якщо один травень опускаємо внизу і інший - це верхній, вони однакові трави. Білий простір в демонстрації травлення є чисто косметичним. Перетравлення відображається як ba78 16bf versus ba7816bf, це той самий простір, що є просто вибором форматування. Невідомі мітки, викликані випадком або білим простором, не є реальними невідповідними.

Виправлення форматування фіксованої смуги також невидимі на рівні байтів. Засвоюється засвоюваним гіфеном, просторами або колонами (як ба-78-16-bf) - форматування конвенції, що полегшує для людини зчитування, не змін до фактичних байтів. Мистецтво ToolAcre інструмент завжди випромінює нижню частину з не роздільниками, що є форматом найбільш командно-лінійних інструментів. Якщо ви порівняли з інструментом, який випромінює по-різному, перетворюйте в одне і те саме уявлення.

Що це не охоплює — хешування файлів, де ті ж принципи застосовуються, але байти приходять з диска, а не текстове поле

Мистецтво ToolAcre SHA калькулятор хешу виконує UTF-8 перетворення перед хешуванням, відображає кількість вхідних байтів, і пропонує базові64 і шестигранні вихідні форми. Основні додатки файлів/dev/src/lib/hash.js показує функцію хешТекс, що викликає травленняБітеса, яка проходить bytes.slice().купе crypto.subtle.digest. Коментарі до цього файлу явно документ, що підтверджується UTF-8 крок є навмисним і зауважити різницю між різними кодуваннями. Тестування вашого входу на відомий вектор (абк має бути ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad в шістнадцятому стані встановлює, що інструмент браузера працює правильно; будь-які точки відхилення до різниці при вході.

Файл захоплення таким же принципом. В байтах в файлі є те, що має значення: різниця між рядками при експорті з однієї системи та імпорті в інший може змінити кожен перетравень. Деякі інструменти пропонують варіанти обробки рядків під час порівняння; інші мають файл як-is. Знаючи, чи має ваш інструмент, як бінарний або виконує текстове нормалізацію, перш за все, для відтворення.

Похід: хеш-байти, не текст — ToolAcre SHA hh калькулятор має байти, які ви вклеїте, тому перевірте, що ви заданий першим

Удосконалення та перевірка роботи тільки тоді, коли ви є однаковими байтами. Почати, підтвердити, що ви замовляєте точний і той самий вхід: запустити echo -n (або друк) замість лунки, щоб уникнути нової лінії, вказати UTF-8 кодування явно, якщо ваш інструмент дозволяє, перевірте, що CRLF не було вставлено редактором або системою утиліти. Потім з'явився ToolAcre калькулятор і командно-лінійна сторона інструментів по боці. Якщо матч травлення, то байти були ідентичними. Якщо вони не використовують дисплей байтів і метод віджимання шістнадцяти, щоб знайти приховану різницю.

Як тільки ви зрозуміли, де байти дивилися, можна вибрати, чи нормалізувати їх для порівняння. Деякі випадки перевірки повинні переконатися, що цілісність файлів, як це існує на диску, в якому випадку, за допомогою якого є мета. Для перевірки видимого вмісту є однаковим, в якому справа нормалізує закінчення рядків і кодування є правильним. Не виправда, вони відповідають різним питанням. Мистецтво SHA-256 алгоритм завжди правий; питання тільки те, що ви запитуєте його, щоб мати той самий вхід в обох випадках.