カテゴリ: Go言語 更新日: 2026/04/27

Go言語の暗号化ライブラリcryptoパッケージを初心者でもわかる解説

Go言語の暗号化ライブラリ(cryptoパッケージ)の基本例
Go言語の暗号化ライブラリ(cryptoパッケージ)の基本例

先生と生徒の会話形式で理解しよう

生徒

「Go言語で安全にパスワードを保存したり、データを暗号化する方法はありますか?」

先生

「はい、Go言語にはcryptoという暗号化ライブラリがあります。このパッケージを使うと、データのハッシュ化や暗号化、署名などが簡単に行えます。」

生徒

「暗号化って難しそうですが、初心者でも使えますか?」

先生

「もちろんです。基本の使い方を理解すれば、簡単に安全な処理が書けます。今日は初心者向けに、わかりやすく例を見ながら解説します。」

1. cryptoパッケージとは何か?

1. cryptoパッケージとは何か?
1. cryptoパッケージとは何か?

Go言語のcryptoパッケージは、データを安全に扱うための機能がまとめられています。例えば、ユーザーのパスワードをそのまま保存すると危険ですが、ハッシュ化を使えば安全に管理できます。ハッシュ化とは、データを一方向に変換して元に戻せない形にすることです。

2. SHA256で文字列をハッシュ化する

2. SHA256で文字列をハッシュ化する
2. SHA256で文字列をハッシュ化する

SHA256は、文字列を固定長のハッシュに変換する暗号化の方法です。これにより、同じ文字列は必ず同じハッシュになりますが、ハッシュから元の文字列を推測することは非常に難しいです。


package main

import (
    "crypto/sha256"
    "fmt"
)

func main() {
    text := "mypassword"
    hash := sha256.Sum256([]byte(text))
    fmt.Printf("SHA256: %x\n", hash)
}

SHA256: e0c9035898dd52fc65c41454cec9c4d2611bfb37

このように、sha256.Sum256を使うだけで簡単にハッシュ化できます。

3. bcryptで安全にパスワードを保存する

3. bcryptで安全にパスワードを保存する
3. bcryptで安全にパスワードを保存する

bcryptは、パスワードを安全に保存するためのハッシュ化アルゴリズムです。通常のSHA256よりも安全で、攻撃者がハッシュから元のパスワードを推測するのがさらに難しくなります。


package main

import (
    "fmt"
    "golang.org/x/crypto/bcrypt"
)

func main() {
    password := []byte("mypassword")
    hashed, _ := bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost)
    fmt.Println("bcryptハッシュ:", string(hashed))

    // パスワード検証
    err := bcrypt.CompareHashAndPassword(hashed, []byte("mypassword"))
    if err != nil {
        fmt.Println("パスワードが間違っています")
    } else {
        fmt.Println("パスワードが正しいです")
    }
}

bcryptハッシュ: $2a$10$9v/8a8LJn2sGf5s3B8wUZe0p...
パスワードが正しいです

このように、ハッシュ化と検証が簡単に行えます。

4. AESでデータを暗号化・復号する

4. AESでデータを暗号化・復号する
4. AESでデータを暗号化・復号する

AESは、データを暗号化して安全に送信したり保存したりするためのアルゴリズムです。暗号化したデータは復号キーがないと元に戻せません。


package main

import (
    "crypto/aes"
    "crypto/cipher"
    "fmt"
)

func main() {
    key := []byte("examplekey123456") // 16バイト
    plaintext := []byte("秘密のメッセージ")

    block, _ := aes.NewCipher(key)
    ciphertext := make([]byte, len(plaintext))
    block.Encrypt(ciphertext, plaintext)
    fmt.Println("暗号化:", ciphertext)

    decrypted := make([]byte, len(ciphertext))
    block.Decrypt(decrypted, ciphertext)
    fmt.Println("復号化:", string(decrypted))
}

暗号化: [35 72 19  ...]
復号化: 秘密のメッセージ

暗号化と復号の仕組みがシンプルで、基本を理解するのに最適です。

5. HMACでデータの改ざんを防ぐ

5. HMACでデータの改ざんを防ぐ
5. HMACでデータの改ざんを防ぐ

HMACは、データが送られてくる途中で改ざんされていないかを確認するために使います。秘密のキーを使ってハッシュを作り、受け取った側で同じ計算をして一致すれば安全です。


package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "fmt"
)

func main() {
    key := []byte("secretkey")
    message := []byte("重要なデータ")

    mac := hmac.New(sha256.New, key)
    mac.Write(message)
    expectedMAC := mac.Sum(nil)
    fmt.Printf("HMAC: %x\n", expectedMAC)
}

HMAC: 5d41402abc4b2a76b9719d911017c592

この方法でデータが途中で改ざんされていないか確認できます。

6. ランダムなキーを生成するcrypto/randの使い方

6. ランダムなキーを生成するcrypto/randの使い方
6. ランダムなキーを生成するcrypto/randの使い方

暗号化に必要なキーはランダムで作る必要があります。crypto/randを使うと、安全にランダムなバイト列を作れます。


package main

import (
    "crypto/rand"
    "fmt"
)

func main() {
    key := make([]byte, 16) // 16バイトのキー
    rand.Read(key)
    fmt.Printf("ランダムキー: %x\n", key)
}

ランダムキー: a1b2c3d4e5f60718293a4b5c6d7e8f90

これで暗号化やHMACに使う安全なキーが作れます。

7. まとめると初心者でも暗号化が簡単に使える

7. まとめると初心者でも暗号化が簡単に使える
7. まとめると初心者でも暗号化が簡単に使える

Go言語のcryptoパッケージを使えば、ハッシュ化、暗号化、HMACなどのセキュリティ機能を簡単に扱えます。SHA256やbcryptでパスワード管理、AESでデータ暗号化、HMACで改ざん検知、crypto/randで安全なキー生成と、基本の手順を覚えれば初心者でも安全なアプリケーションを作れます。

これらを組み合わせて使うことで、ユーザー情報や機密データを安全に扱うGoアプリを作ることが可能です。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

今回の記事では、Go言語のcryptoパッケージを使った暗号化やハッシュ化の基本的な使い方を詳しく解説しました。初心者でも理解しやすいように、パスワード管理やデータ暗号化、HMACによる改ざん検知、ランダムキー生成など、代表的な暗号処理のサンプルコードを紹介しました。
まず、SHA256を使った文字列のハッシュ化では、固定長のハッシュ値に変換することで、パスワードや重要な情報を安全に管理できます。さらに、bcryptによるパスワードのハッシュ化では、単純なSHA256よりもセキュリティを強化し、攻撃者によるリバースエンジニアリングを防ぎます。
また、AESを使ったデータの暗号化と復号化では、暗号化キーがなければ元の情報に戻せないため、送信や保存の際にデータを保護できます。加えて、HMACを使えば、データの送信中に改ざんされていないかを検証でき、安全性を確保できます。
暗号化処理においては、crypto/randを使ったランダムなキー生成も重要です。予測不可能なランダムキーを作ることで、AESやHMACなどの暗号処理をさらに安全に行うことができます。
これらの基本機能を理解し、適切に組み合わせることで、初心者でも安全で堅牢なGo言語アプリケーションを構築することが可能です。データ保護、パスワード管理、通信の安全性確保など、さまざまなシーンで活用できます。

先生と生徒の振り返り会話

生徒

「先生、Go言語のcryptoパッケージを使えば初心者でも簡単に安全なパスワード管理やデータ暗号化ができるんですね?」

先生

「その通りです。SHA256やbcryptでハッシュ化し、AESでデータを暗号化、HMACで改ざんを防ぎ、crypto/randでランダムキーを生成する手順を覚えれば、安全な処理が書けます。」

生徒

「SHA256は簡単に使えますが、bcryptやAESは少し難しそうです。」

先生

「最初は難しく見えるかもしれませんが、Go言語ではライブラリがしっかり整備されているので、サンプルコードを参考にすれば誰でも扱えます。実際に手を動かしてコードを書いてみることが大切です。」

生徒

「なるほど、実際にハッシュ化や暗号化を試してみると理解が深まりますね。」

先生

「その通りです。例えばパスワードをbcryptでハッシュ化して保存し、ログイン時に検証する処理を作るだけでも、セキュリティの基本が学べます。AESを使った暗号化も、送信するデータを安全に扱う上で非常に重要です。」

生徒

「HMACやランダムキー生成も使えば、データの改ざんを防ぎ、より安全にアプリを作れますね。」

先生

「その通りです。今回学んだ知識を応用して、ユーザー情報や機密データを守る安全なGoアプリを作れるようになります。重要なのは、暗号化やハッシュ化の手順と使い方を理解し、必要に応じて適切に組み合わせることです。」

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのデリゲーション(byキーワード)の使い方とは?初心者向けにやさしく解説!
New2
Kotlin
Kotlinで定数を定義する方法!変更されない変数の書き方と命名ルール
New3
Kotlin
Kotlinの高階関数とは?関数を引数に渡す基本的な仕組み
New4
Kotlin
Kotlinのthis・superキーワードとは?意味と使い分けを初心者向けにわかりやすく解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Go言語
Go言語の複数モジュールプロジェクト構成を完全解説!初心者でもわかるモジュール管理
No.3
Java&Spring記事人気No3
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.6
Java&Spring記事人気No6
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.7
Java&Spring記事人気No7
Kotlin
Kotlin Multiplatformライブラリの活用例と導入方法を初心者向けに解説!Android・iOS・Webを1つのコードで開発
No.8
Java&Spring記事人気No8
Kotlin
Kotlinのthis・superキーワードとは?意味と使い分けを初心者向けにわかりやすく解説