hns/main.go

76 lines
1.5 KiB
Go

package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/md5"
"crypto/rand"
"fmt"
"io"
"io/ioutil"
"os"
)
func checkErr(err error) {
if err != nil {
panic(err.Error())
}
}
func keyMkr(passwd string) []byte {
key := md5.New()
key.Write([]byte(passwd))
return key.Sum(nil)
}
func encrypt(data []byte, key []byte) []byte {
block, err := aes.NewCipher(key)
checkErr(err)
gcm, err := cipher.NewGCM(block)
checkErr(err)
nonce := make([]byte, gcm.NonceSize())
_ , err= io.ReadFull(rand.Reader, nonce)
checkErr(err)
sealed := gcm.Seal(nonce, nonce, data, nil)
return sealed
}
func decrypt(sealed []byte, key []byte) []byte {
block, err := aes.NewCipher(key)
checkErr(err)
gcm, err := cipher.NewGCM(block)
nonceSize := gcm.NonceSize()
nonce, ctxt := sealed[:nonceSize], sealed[nonceSize:]
data, err := gcm.Open(nil, nonce, ctxt, nil)
checkErr(err)
return data
}
func file2data(filename string) []byte {
data, err := ioutil.ReadFile(filename)
checkErr(err)
return data
}
func data2file(filename string, data []byte) {
f, err := os.Create(filename)
checkErr(err)
defer f.Close()
f.Write(data)
}
func main() {
var passwd string = "ThisAnnPassphrase"
fmt.Println(passwd)
key := keyMkr(passwd)
fmt.Println(string(key))
data := []byte("Thi is some data")
fmt.Println(string(data))
fmt.Println("encryption:")
dataSealed := encrypt(data,key)
fmt.Println(string(dataSealed))
fmt.Println("decryption:")
fmt.Println(string(decrypt(dataSealed,key)))
}