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

ハッシュする golang ファイル

May 13, 2023 pm 01:22 PM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

Goでユニットテストをどのように書きますか? Goでユニットテストをどのように書きますか? Mar 21, 2025 pm 06:34 PM

Goでユニットテストをどのように書きますか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

See all articles