いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-247 (crypto/aesで暗号化と復号)(ECB, Electronic Codebook Mode)

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

AESで暗号化する必要があったので、ECBモードとCBCモードで試してみました。

今回はECBモードでの利用です。

ECBとかCBCって何?って方は Wikipedia の以下が分かりやすいです。

ja.wikipedia.org

サンプル

package aes

import (
    "crypto/aes"
    "crypto/cipher"
    "encoding/hex"

    "github.com/devlights/gomy/output"
)

// Ecb -- crypto/aes のサンプルです (ECB) .
//
// # REFERENCES
//   - https://stackoverflow.com/questions/24072026/golang-aes-ecb-encryption
//   - https://blog.takuchalle.dev/post/2019/06/06/how_to_aes_encrypt_golang/
//   - https://www.developer.com/languages/cryptography-in-go/
//   - https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard
func Ecb() error {
    const (
        size = aes.BlockSize
        txt  = "123456789012345_123456789012345_123456789012345_123456789012345_" // 64 bytes
        key  = "this_must_be_of_32_byte_length!!"
    )

    var (
        blk cipher.Block
        err error
    )

    blk, err = aes.NewCipher([]byte(key))
    if err != nil {
        return err
    }

    var (
        plain    = []byte(txt)
        encBytes = make([]byte, len(plain))
        decBytes = make([]byte, len(plain))
    )

    // https://stackoverflow.com/questions/24072026/golang-aes-ecb-encryption
    for bs, be := 0, size; bs < len(plain); bs, be = bs+size, be+size {
        blk.Encrypt(encBytes[bs:be], plain[bs:be])
        blk.Decrypt(decBytes[bs:be], encBytes[bs:be])
    }

    output.Stdoutl("[AES][Encoding]", hex.EncodeToString(encBytes))
    output.Stdoutl("[AES][Decoding]", string(decBytes))

    return nil
}

以下、実行結果です。

$ task
task: [run] go run . -onetime

ENTER EXAMPLE NAME: crypto_aes_ecb

[Name] "crypto_aes_ecb"
[AES][Encoding]      b418fa0c8115c71ee2ba4680a1339033b418fa0c8115c71ee2ba4680a1339033b418fa0c8115c71ee2ba4680a1339033b418fa0c8115c71ee2ba4680a1339033
[AES][Decoding]      123456789012345_123456789012345_123456789012345_123456789012345_


[Elapsed] 36.23µs

よーく見ると、同じパターンが繰り返されています。同じ鍵を使ってるのでECBの場合はこうなります。

参考情報

stackoverflow.com

Go言語による並行処理

Go言語による並行処理

Amazon


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。