3

私はこれで苦労しています。アップロードされたファイルのハッシュコードをチェック/構築するための正しい方向に誰かが私を向けることができますか、それとも以下のコードで私が間違っていることを教えてもらえますか?

getFileSHA256(softwareUpload.PostedFile) 'Line that calls the function includes a reference to an uploaded file

Private Function getFileSHA256(ByVal theFile As Web.HttpPostedFile) As String
    Dim SHA256CSP As New SHA256Managed()
    Dim byteHash() As Byte = SHA256CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String
    Dim sb As New System.Text.StringBuilder(arrInput.Length * 2)
    For i As Integer = 0 To arrInput.Length - 1
        sb.Append(arrInput(i).ToString("X2"))
    Next
    Return sb.ToString().ToLower
End Function

関数は機能しますが、戻り値が他のプログラムの sha256 値と一致しないことを付け加えておきます。

編集------

コードで使用している関数が他に 2 つあります。SHA1 は SHA256 と同じ種類の結果を取得します。結果は信頼できるソースと一致しません。

ただし、MD5 は期待どおりに動作します。

Private Function getFileSHA1(ByVal theFile As Web.HttpPostedFile) As String
    Dim SHA1CSP As New SHA1CryptoServiceProvider()
    Dim byteHash() As Byte = SHA1CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

Private Function getFileMd5(ByVal theFile As Web.HttpPostedFile) As String
    Dim Md5CSP As New System.Security.Cryptography.MD5CryptoServiceProvider
    Dim byteHash() As Byte = Md5CSP.ComputeHash(theFile.InputStream)
    Return ByteArrayToString(byteHash)
End Function

これらの機能が期待どおりに機能していることがわかったら、これらの機能を統合する予定です。

これらの唯一の違いは、MD5 が「MD5CryptoServiceProvider」を使用しており、期待どおりに機能することです。SHA1 も「SHA1CryptoServiceProvider」を使用していますが、信頼できるソースと一致しません。

4

1 に答える 1

1

ここでいくつかのテストを行いましたが、テキスト ファイルの場合SHA256Managed は完全に機能するようです。

私のコードは以下のとおりです。私はあなたの実装を使用しましたByteArrayToString

Sub Main()
  Dim s As New SHA256Managed
  Dim fileBytes() As Byte = IO.File.ReadAllBytes("s:\sha256.txt")
  Dim hash() As Byte = s.ComputeHash(fileBytes)

  Dim referenceHash As String = "18ffd9682c5535a2b2798ca51b13e9490df326f185a83fe6e059f8ff47d92105"
  Dim calculatedHash As String = ByteArrayToString(hash)
  MsgBox(calculatedHash = referenceHash) 'outputs True
End Sub

Private Function ByteArrayToString(ByVal arrInput() As Byte) As String
  Dim sb As New System.Text.StringBuilder(arrInput.Length * 2)
  For i As Integer = 0 To arrInput.Length - 1
    sb.Append(arrInput(i).ToString("X2"))
  Next
  Return sb.ToString().ToLower
End Function

テスト目的で、以下の内容のファイルを作成しましsha256.txtS:

my test file

(末尾のスペースや改行はありません)

同じデータを入力して、ここから参照ハッシュ値を取得しました。

thisthisも確認してください。一致しないという事実は、プラットフォームや信頼できるソースの実装に関連している可能性があるか、追加の変換手順が必要である可能性があります。

于 2013-02-06T01:16:39.557 に答える