Я пытаюсь зашифровать некоторый текст внутри базы данных, которая будет загружаться и дешифроваться во время запуска программы.
Я пробовал несколько методов, в том числе стороннюю библиотеку https://github.com/richard-lyman/lithcrypt безрезультатно. Используя следующий метод, шифрует/дешифрует 8/10 элементов, но кажется, что в какой-то момент шифрования/дешифрования остался какой-то остаток. Поскольку он стоит, мой код выглядит следующим образом:
package client
import (
"encoding/base64"
"crypto/aes"
"crypto/cipher"
"fmt"
)
var iv = []byte{34, 35, 35, 57, 68, 4, 35, 36, 7, 8, 35, 23, 35, 86, 35, 23}
func encodeBase64(b []byte) string {
return base64.StdEncoding.EncodeToString(b)
}
func decodeBase64(s string) []byte {
data, err := base64.StdEncoding.DecodeString(s)
if err != nil { panic(err) }
return data
}
func Encrypt(key, text string) string {
block, err := aes.NewCipher([]byte(key))
if err != nil { panic(err) }
plaintext := []byte(text)
cfb := cipher.NewCFBEncrypter(block, iv)
ciphertext := make([]byte, len(plaintext))
cfb.XORKeyStream(ciphertext, plaintext)
return encodeBase64(ciphertext)
}
func Decrypt(key, text string) string {
block, err := aes.NewCipher([]byte(key))
if err != nil { panic(err) }
ciphertext := decodeBase64(text)
cfb := cipher.NewCFBEncrypter(block, iv)
plaintext := make([]byte, len(ciphertext))
cfb.XORKeyStream(plaintext, ciphertext)
}
Было упомянуто, что мне может понадобиться заполнить строку, но мне кажется странным, что мне придется накладывать потоковый шифр.
Ниже приведен пример этой ошибки: http://play.golang.org/p/4FQBAeHgRs