2017-12-03 32 views
1

SHA256を使用してハッシュコードを生成する簡単なコードがありますが、同じ入力に対して異なる結果が得られます。しかし、引用符で同じ文字列値を宣言すると、同じ結果が返されます。たとえば、_input= "test"です。SHA256が同じ文字列入力で異なる結果を返す

public static System.String generateKey(System.String _input) 
{ 
    System.Byte[] convertedArr; 
    SHA256Managed sh = new System.Security.Cryptography.SHA256Managed(); 
     convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input)); 
     hashCode = System.Convert::ToBase64String(convertedArr); 
    return hashCode; 
    } 
+0

'_input'の値は何ですか? – aaron

+1

コードの詳細を表示してください - 入力内容、FNSGenerateHashDetailsなど – DAXaholic

+1

[tag:c#]を使用していない場合は、タグを付けないでください。 –

答えて

1

convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input));

ハッシュに入力_inputStringであるが、長さが_inputから取得され、それらは同じではありません。 _inputString!= _input

機能defintion:

public static System.String generateKey(System.String _input) 

現在コード:

convertedArr = sh.ComputeHash(System.Text.Encoding::UTF8.GetBytes(_inputString),0, System.Text.Encoding::UTF8.GetByteCount(_input)); 

デバッグ可能(semio擬似)コード:これにより

​​

入力と長さを容易に確認することができます。 _inputは1度しか使用されないため、エラーの可能性は低くなります。

注:実際には、長さはinputBytesですが、X ++には慣れていないので変更しませんでした。

+0

ありがとうzaph私は以下のあなたと同じものを使用しています。_inputと_inputStringはタイプミスです。それは同じです。 inputBytes = System.Text.Encoding :: UTF8.GetBytes(_input) inputLength = System.Text.Encoding :: UTF8.GetByteCount(_input) hashBytes = convertedArr = sh.ComputeHash(inputBytes、0、inputLength);私はinputLengthとinputBytesの両方から長さを試しましたが、なぜsh.ComputHashが毎回違うのか分かりません。 inputBytesとinputLengthは常にOKです。私がハードコードし、プログラム内で同じ文字列を宣言すれば、それは動作しますが、私はパラメータとしてこれを取ると無限になります。 – Sweety

+0

入力が異なるため出力が異なります。これが起こる1つの方法は、lengthパラメータが入力データよりも大きく、指定されたバイト数を得るために、実際の入力に続くガベージバイトを使用することです。明らかに 'System.Security.Cryptography.SHA256Managed'は動作しますが、私はまだドキュメントを読んでいません。 – zaph

+0

あなたは 'ComputeHash(Byte []、Int32、Int32)'の代わりに 'ComputeHash(Byte [])'を試してみるかもしれません。それはサイズの変数を排除します。また '.Text.Encoding :: UTF8.GetBytes'は' Byte [] '型を返しますか?最後に短い文字列( "TestMe"など)を試し、[HASH CALCULATOR](http://extranet.cryptomathic.com/hashcalc/index)などのSHA-256オンライン実装と比較して、簡単な作業。 – zaph

関連する問題