データベース内のテキストを暗号化して、プログラムの起動時にロードおよび復号化しようとしています。
サードパーティのライブラリ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