ホームページ  >  記事  >  バックエンド開発  >  ハッシュする golang ファイル

ハッシュする golang ファイル

王林
王林オリジナル
2023-05-13 13:22:36782ブラウズ

Golang は、強力に型指定され、高い効率と同時実行性を備えた静的にコンパイルされた言語です。 Golang には、さまざまな目的に使用できる豊富な標準ライブラリとサードパーティ ライブラリがあります。この記事では、Golang を使用してファイルをハッシュに変換する方法を説明します。

ハッシュは、任意の長さのデータを固定長の暗号化文字列にマッピングするテクノロジーです。ハッシュ アルゴリズムは、指定されたデータをより小さい固定の不可逆的な値にマッピングでき、ハッシュ アルゴリズムの結果はデー​​タの整合性検証やデジタル署名などに使用できます。多くのシナリオでは、ファイルのダウンロード時の検証やファイル送信の信頼性など、ファイルの整合性を検証するためにハッシュ アルゴリズムを使用する必要があります。

Golang の標準ライブラリは、MD5、SHA1、SHA256 などのさまざまなハッシュ アルゴリズムを提供します。これらのハッシュ アルゴリズムはすべて hash.Hash インターフェイスを継承しているため、同じ方法で操作できます。

以下は、Golang を使用してファイルの MD5 ハッシュ値を計算する方法を示す簡単なサンプル コードです:

package main

import (
    "crypto/md5"
    "fmt"
    "io"
    "os"
)

func main() {
    file, err := os.Open("testfile.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    h := md5.New()
    if _, err := io.Copy(h, file); err != nil {
        panic(err)
    }

    fmt.Printf("MD5 Hash: %x", h.Sum(nil))
}

このサンプル コードでは、os パッケージの Open メソッドを使用します。ファイルtestfile.txtが開きます。次に、md5 パッケージの New メソッドを使用して md5 ハッシュ オブジェクト h を作成し、io パッケージの Copy メソッドを使用してファイルの内容をハッシュ オブジェクトにコピーしました。最後に、ハッシュ オブジェクトの Sum メソッドを使用してハッシュ値を計算し、%x 形式で出力します。

MD5 に加えて、SHA1 や SHA256 などのハッシュ アルゴリズムも使用できます。md5.New を sha1.New または sha256.New に置き換えるだけです。たとえば、サンプル コードの MD5 ハッシュ値を計算する部分を変更して、SHA256 ハッシュ値を計算することができます。

h := sha256.New()
if _, err := io.Copy(h, file); err != nil {
    panic(err)
}

fmt.Printf("SHA256 Hash: %x", h.Sum(nil))

単一ファイルのハッシュ値の計算に加えて、Golang の標準ライブラリでは、次のような関数も提供されています。ディレクトリ内のすべてのファイルのハッシュを簡単に計算できるメソッド。たとえば、ファイルパス パッケージの Walk メソッドを使用して、次のようにディレクトリとサブディレクトリを走査し、すべてのファイルのハッシュ値を計算できます。

package main

import (
    "crypto/md5"
    "fmt"
    "io"
    "os"
    "path/filepath"
)

func main() {
    root := "."
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        if !info.Mode().IsRegular() {
            return nil
        }

        file, err := os.Open(path)
        if err != nil {
            return err
        }
        defer file.Close()

        h := md5.New()
        if _, err := io.Copy(h, file); err != nil {
            return err
        }

        fmt.Printf("%x  %s
", h.Sum(nil), path)
        return nil
    })
    if err != nil {
        panic(err)
    }
}

このサンプル コードでは、Walk メソッドを次のように使用します。ファイルパス パッケージ 現在のディレクトリとそのサブディレクトリが走査され、すべてのファイルの MD5 ハッシュ値が計算されて出力されます。 Walk メソッドのコールバック関数では、まず現在のファイルが通常のファイルかどうかを判定し、そうでない場合は nil を返し、そうでない場合はファイルを開いてハッシュ値を計算して出力します。

単一ファイルとディレクトリ内のすべてのファイルのハッシュ値を計算することに加えて、ファイルのハッシュ値をチャンク単位で計算することもできます。この方法は、ファイルをいくつかのブロックに分割し、各ブロックのハッシュ値を個別に計算し、最後にすべてのブロックのハッシュ値を連結してファイル全体のハッシュ値を計算することで、大きなファイルを処理する場合に使用できます。

要約すると、Golang は、ファイルのハッシュ値を簡単に計算できる、ファイルを操作するためのハッシュ アルゴリズムとメソッドを豊富に提供します。単一ファイルのハッシュ値を計算する場合でも、ディレクトリ内のすべてのファイルを計算する場合でも、大きなファイルのハッシュ値をチャンクに分けて処理する場合でも、Golang はシンプルで効率的なソリューションを提供します。

以上がハッシュする golang ファイルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。