web-dev-qa-db-ja.com

SHA256ハッシュアルゴリズムはコンテンツのエンコードに基づいて変わりますか?

JavaScriptでSHA256を実装する方法を調べ始めたところ、たとえば this が見つかりました。それはそのように聞こえるUTF-8エンコーディングが必要です。必要なもの/サポートされているものだけを確認した別のASCIIエンコーディングで、それ以外の場合は未定義を返しました。

これは、エンコーディングに基づいてアルゴリズムがどのように変化するのか疑問に思いますか?これに関する詳細情報はどこにありますか?ラテンエンコーディングまたはその他のカスタム/プライベートエンコーディングを使用したい場合、どうすればSHA256をサポートできますか?

1
Lance Pollard

SHA256および事実上すべての暗号化方式はバイトで動作します。これは実際的でない場合が多いため、たとえば、utf-8でエンコードされた文字列をバイトに変換して暗号化し、base-64でエンコードされた暗号化データを生成するユーティリティがある場合があります。これはSHA自体の一部ではありませんが、使いやすくなっています。

復号化の場合、二重の問題があります。入力が有効なbase-64でなく、復号化されたクリアテキストのバイトがutf-8に変換できない可能性があるため、任意の入力で失敗する可能性があることを受け入れる必要があります。

また、Windows-1252またはUTF-16データを暗号化する別の方法がある場合は、エンコーディングが何であっても、同じテキストが同じ方法で暗号化されるようにすることを強くお勧めします。

3
gnasher729