Я пытаюсь заставить AES-шифрование и дешифрование работать в своем API-интерфейсе go, я создаю новый блок с помощью aes.NewCipher (mykey), и блок кажется действительным, но затем, когда я вызываю cipher.NewCBCDecrypter (block,iv) функция вызывает ошибку «недопустимый адрес памяти или разыменование нулевого указателя» в строке 26 в cbc.go, когда она пытается вызвать b.BlockSize ().
Так что я попытался вызвать block.BlockSize () измой собственный код, и я также получаю исключение, но когда я проверяю блок var, он не равен nil.
func Decrypt(data []byte) (result []byte, err error) {
logger := logrus.New()
logger.Infof("Starting decryption for string: %s\n", string(data[:]))
var block cipher.Block
if block, err := aes.NewCipher([]byte(app.Config.AESKey)); (err != nil) || (block == nil) {
logger.Infof("Failed to create block\n")
return nil, err
}
if len(data) < aes.BlockSize {
logger.Infof("Input too short\n")
return nil, nil
}
cbc := cipher.NewCBCDecrypter(block, []byte(app.Config.AESIV))
cbc.CryptBlocks(data, data)
return data, nil
}
Я ожидаю, что функция будет работать должным образом, поскольку aes.NewCipher не возвращает ошибку.