mirror of
https://github.com/Binject/debug
synced 2026-06-08 10:28:33 +00:00
40 lines
1.0 KiB
Go
40 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"crypto/aes"
|
|
"crypto/cipher"
|
|
"crypto/rand"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"io"
|
|
)
|
|
|
|
func main() {
|
|
// Load your secret key from a safe place and reuse it across multiple
|
|
// Seal/Open calls. (Obviously don't use this example key for anything
|
|
// real.) If you want to convert a passphrase to a key, use a suitable
|
|
// package like bcrypt or scrypt.
|
|
// When decoded the key should be 16 bytes (AES-128) or 32 (AES-256).
|
|
key, _ := hex.DecodeString("6368616e676520746869732070617373776f726420746f206120736563726574")
|
|
plaintext := []byte("exampleplaintext")
|
|
|
|
block, err := aes.NewCipher(key)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
// Never use more than 2^32 random nonces with a given key because of the risk of a repeat.
|
|
nonce := make([]byte, 12)
|
|
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
aesgcm, err := cipher.NewGCM(block)
|
|
if err != nil {
|
|
panic(err.Error())
|
|
}
|
|
|
|
ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
|
|
fmt.Printf("%x\n", ciphertext)
|
|
}
|