Skip to content

Instantly share code, notes, and snippets.

@gitsrc
Forked from temoto/aes-cfb-example.go
Created February 16, 2019 06:57
Show Gist options
  • Select an option

  • Save gitsrc/d1a156407c3e0723b2327c4d083b77c6 to your computer and use it in GitHub Desktop.

Select an option

Save gitsrc/d1a156407c3e0723b2327c4d083b77c6 to your computer and use it in GitHub Desktop.

Revisions

  1. @temoto temoto created this gist Feb 27, 2013.
    53 changes: 53 additions & 0 deletions aes-cfb-example.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    package main

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

    func EncryptAESCFB(dst, src, key, iv []byte) error {
    aesBlockEncrypter, err := aes.NewCipher([]byte(key))
    if err != nil {
    return err
    }
    aesEncrypter := cipher.NewCFBEncrypter(aesBlockEncrypter, iv)
    aesEncrypter.XORKeyStream(dst, src)
    return nil
    }

    func DecryptAESCFB(dst, src, key, iv []byte) error {
    aesBlockDecrypter, err := aes.NewCipher([]byte(key))
    if err != nil {
    return nil
    }
    aesDecrypter := cipher.NewCFBDecrypter(aesBlockDecrypter, iv)
    aesDecrypter.XORKeyStream(dst, src)
    return nil
    }

    func main() {
    const key16 = "1234567890123456"
    const key24 = "123456789012345678901234"
    const key32 = "12345678901234567890123456789012"
    var key = key16
    var msg = "message"
    var iv = []byte(key)[:aes.BlockSize] // Using IV same as key is probably bad
    var err error

    // Encrypt
    encrypted := make([]byte, len(msg))
    err = EncryptAESCFB(encrypted, []byte(msg), []byte(key), iv)
    if err != nil {
    panic(err)
    }
    fmt.Printf("Encrypting %v %s -> %v\n", []byte(msg), msg, encrypted)

    // Decrypt
    decrypted := make([]byte, len(msg))
    err = DecryptAESCFB(decrypted, encrypted, []byte(key), iv)
    if err != nil {
    panic(err)
    }
    fmt.Printf("Decrypting %v -> %v %s\n", encrypted, decrypted, decrypted)
    }