質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

2回答

7591閲覧

ハッシュ化と文字コード

退会済みユーザー

退会済みユーザー

総合スコア0

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2018/11/07 06:51

編集2018/11/07 08:02

HMAC-SHA-1やHMAC-SHA-256などのハッシュ化についてです。
ハッシュ化する前に文字をバイト配列へ変換すると思います。
ハッシュ化する文字列をどの文字コードでエンコードするかによって生成するバイト配列は違いますよね。
「エンコードされる文字列の文字コード」と「エンコードに使用する文字コード」を同じにする必要があるとゆうことですか?逆にそれ以外のエンコードに使用する文字コードでエンコードした場合は間違え。といった感じでしょうか?

具体的にいうとこんな感じです。
textの文字コードはUnicodeです。
ハッシュ化に用いるバイト配列の生成方法としてただしいのはUnicodeエンコードで生成されたバイト配列でそれ以外は間違いとゆうことなのでしょうか。

string text = "あ"; //ASCII エンコード byte[] data = System.Text.Encoding.ASCII.GetBytes(text); foreach (var d in data) { Console.WriteLine(d); } Console.WriteLine(""); //Shift-JISエンコード data =System.Text.Encoding.GetEncoding("shift_jis").GetBytes(text); foreach (var d in data) { Console.WriteLine(d); } Console.WriteLine(""); //EUCエンコード data = System.Text.Encoding.GetEncoding("euc-jp").GetBytes(text); foreach (var d in data) { Console.WriteLine(d); } Console.WriteLine(""); //unicodeエンコード data = System.Text.Encoding.Unicode.GetBytes(text); foreach (var d in data) { Console.WriteLine(d); } Console.WriteLine(""); //UTF8エンコード data = System.Text.Encoding.UTF8.GetBytes(text); foreach (var d in data) { Console.WriteLine(d); } Console.ReadKey();

出力

63 130 160 164 162 66 48 227 129 130

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

APIKeyなどで使用される半角英数字の文字は、ASCIIコードの為、どの文字コードでも、生成されるハッシュ値は同じになるハズだと思います。

使用する文字コードに「一般的な物」というのはない為、その時々で決めればよいかと思います。

投稿2018/11/07 07:36

teramon3333

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/07 07:40

回答ありがとうございます。 「エンコードされる文字列の文字コード」と「エンコードに使用する文字コード」を同じにするとゆうことですか?逆にそれ以外のエンコードに使用する文字コードでエンコードした場合は間違え。といった感じでしょうか?
macof

2018/11/08 04:36

細かいことで申し訳ないのですが、 ASCIIコード領域の文字でもUnicode系はUTF8以外同じバイト列になることはないです。 また、UTF8以外では同じ文字列でもバイトオーダーによって異なるバイト列になります。
guest

0

ベストアンサー

あなたが使っている文字コードでいいのでは


「エンコードされる文字列の文字コード」と「エンコードに使用する文字コード」を同じにする必要があるとゆうことですか?逆にそれ以外のエンコードに使用する文字コードでエンコードした場合は間違え。といった感じでしょうか?

そりゃそういうことです
あくまでバイト列に対してのハッシュです。
あなたが、使う文字コードを規定すればそれでいいんじゃないでしょうか

投稿2018/11/07 06:58

編集2018/11/07 08:51
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/11/07 08:09

回答編集しました。宜しければご一読ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問