| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- package crypto
- import (
- "crypto/aes"
- "crypto/cipher"
- "crypto/rand"
- "crypto/sha256"
- "golang.org/x/crypto/scrypt"
- "io"
- )
- func GenerateEncryptKey(data []byte) []byte {
- sk, err := scrypt.Key(data, nil, 32768, 8, 1, 32)
- if err != nil {
- panic(err)
- }
- sum := sha256.Sum256(append(data, sk...))
- return sum[:]
- }
- func Hash256(data []byte) []byte {
- sum := sha256.Sum256(data)
- return sum[:]
- }
- func Encrypt(data []byte, key []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- panic(err)
- }
- ciphertext := make([]byte, aes.BlockSize+len(data))
- iv := ciphertext[:aes.BlockSize]
- if _, err := io.ReadFull(rand.Reader, iv); err != nil {
- panic(err)
- }
- stream := cipher.NewCTR(block, iv)
- stream.XORKeyStream(ciphertext[aes.BlockSize:], data)
- return ciphertext, nil
- }
- func Decrypt(encryptedData []byte, key []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- panic(err)
- }
- data := make([]byte, len(encryptedData[aes.BlockSize:]))
- iv := encryptedData[:aes.BlockSize]
- stream := cipher.NewCTR(block, iv)
- stream.XORKeyStream(data, encryptedData[aes.BlockSize:])
- return data, nil
- }
|