Crypto in Go

 

自己紹介

  • マネーフォワード
  • Securityメイン。最近は認証技術に興味ある
  • 最近Windwosと戯れることが多い
 

最近やってること


 

 

Goにおける暗号アルゴリズムを利用する

  • ブロック暗号のAES及びそのモードについてみる
  • 間違えている自信があるので、見つけた場合は教えてください

 

  • AESをまるっというと、”固定長(128bit)のブロックを、128/192/256bitの鍵で暗号化”する暗号アルゴリズム

 
func EncryptByBlockSecretKey(key []byte, plainText string) ([]byte, error) {
    c, err := aes.NewCipher(key); if err != nil { // NewCipherで暗号オブジェクトを作る。
        return nil, err
    }
    cipherText := make([]byte, aes.BlockSize)

    c.Encrypt(cipherText, []byte(plainText)) // Input/Output must be 16bits large
    return cipherText, nil
}

func DecryptByBlockSecretKey(key []byte, cipherText []byte) string {
    c, err := aes.NewCipher(key); if err != nil { // NewCipherで暗号オブジェクトを作る。
        fmt.Println(err.Error())
        return ""
    }

    plainText := make([]byte, aes.BlockSize)
    c.Decrypt(plainText, cipherText)

    return string(plainText)
}

func main() {