Member-only story

Goでのパスワードを使用したデータ暗号化(前半)

gavin.zhou
12 min readJul 6, 2020

--

Introduction

データを暗号化する場合、通常はそのデータを復号化できるランダムキーを作成します。特定のケースにおいては、パスワードのようにデータを復号化するためにユーザが指定したキーを使用する場合もあります。しかし、暗号化アルゴリズムに使用されるキーは、通常、少なくとも32バイトである必要があります。しかし、私たちのパスワードではその基準を満たしていない可能性が高いので、それを解決する方法が必要になります。最近、ずっと私は解決策を模索していたので、この記事ではその方法をご紹介します。しかし、その前に、私たちは重要な事を押さえておきましょう。

免責事項: 私は暗号化の専門家ではありませんが、この記事で提供されている解決策にたどり着くために使用したソースについて色々な見解を述べています。私はみなさんがよりよく理解するために、これらのソースを読んだり、見たりすることを強くお勧めします。

OKです。少し話がそれましたが、始めましょう!

Encrypt

まずはデータを暗号化することから始めましょう。まず、キーとデータの引数を受け取るEncrypt関数を作成します。これを元に、キーを使って復号できるデータを暗号化します。まず、32個のランダムなバイトを使ってキーを生成し、後でパスワードに置き換えます。次に生成されたキーでデータを暗号化するコードを示しておきます。

import ("crypto/aes""crypto/cipher""crypto/rand")func Encrypt(key, data []byte) ([]byte, error) {blockCipher, err := aes.NewCipher(key)if err != nil {return nil, err}gcm, err := cipher.NewGCM(blockCipher)if err != nil {return nil, err}nonce := make([]byte, gcm.NonceSize())if _, err = rand.Read(nonce); err != nil {return nil, err}ciphertext := gcm.Seal(nonce, nonce, data, nil)

--

--

No responses yet