This commit is contained in:
Mike Schwörer 2023-01-29 06:02:58 +01:00
parent 297d6c52a8
commit 87fa6021e4
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
2 changed files with 45 additions and 2 deletions

View File

@ -6,42 +6,63 @@ import (
"crypto/rand" "crypto/rand"
"encoding/base64" "encoding/base64"
"errors" "errors"
"golang.org/x/crypto/scrypt"
"io" "io"
) )
// https://stackoverflow.com/a/18819040/1761622 // https://stackoverflow.com/a/18819040/1761622
func EncryptAES(key, text []byte) ([]byte, error) { func EncryptAESSimple(password, text []byte) ([]byte, error) {
key, err := scrypt.Key(password, nil, 32768, 8, 1, 32) // this is not 100% correct, rounds too low and salt is missing
if err != nil {
return nil, err
}
block, err := aes.NewCipher(key) block, err := aes.NewCipher(key)
if err != nil { if err != nil {
return nil, err return nil, err
} }
b := base64.StdEncoding.EncodeToString(text) b := base64.StdEncoding.EncodeToString(text)
ciphertext := make([]byte, aes.BlockSize+len(b)) ciphertext := make([]byte, aes.BlockSize+len(b))
iv := ciphertext[:aes.BlockSize] iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil { if _, err := io.ReadFull(rand.Reader, iv); err != nil {
return nil, err return nil, err
} }
cfb := cipher.NewCFBEncrypter(block, iv) cfb := cipher.NewCFBEncrypter(block, iv)
cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b)) cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b))
return ciphertext, nil return ciphertext, nil
} }
func DecryptAES(key, text []byte) ([]byte, error) { func DecryptAESSimple(password, text []byte) ([]byte, error) {
key, err := scrypt.Key(password, nil, 32768, 8, 1, 32) // this is not 100% correct, rounds too low and salt is missing
if err != nil {
return nil, err
}
block, err := aes.NewCipher(key) block, err := aes.NewCipher(key)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if len(text) < aes.BlockSize { if len(text) < aes.BlockSize {
return nil, errors.New("ciphertext too short") return nil, errors.New("ciphertext too short")
} }
iv := text[:aes.BlockSize] iv := text[:aes.BlockSize]
text = text[aes.BlockSize:] text = text[aes.BlockSize:]
cfb := cipher.NewCFBDecrypter(block, iv) cfb := cipher.NewCFBDecrypter(block, iv)
cfb.XORKeyStream(text, text) cfb.XORKeyStream(text, text)
data, err := base64.StdEncoding.DecodeString(string(text)) data, err := base64.StdEncoding.DecodeString(string(text))
if err != nil { if err != nil {
return nil, err return nil, err
} }
return data, nil return data, nil
} }

22
cryptext/aes_test.go Normal file
View File

@ -0,0 +1,22 @@
package cryptext
import "testing"
func TestEncryptAESSimple(t *testing.T) {
pw := []byte("hunter12")
str1 := []byte("Hello World")
str2, err := EncryptAESSimple(pw, str1)
if err != nil {
panic(err)
}
str3, err := DecryptAESSimple(pw, str2)
if err != nil {
panic(err)
}
assertEqual(t, string(str1), string(str3))
}