Когда я пытаюсь запустить следующий код (я пытаюсь зашифровать представление байтового массива строки, используя AES в режиме CFB), я получаю неверный адрес памяти или ошибку разыменования нулевого указателя , в строке sEnc.XORKeyStream (msgB, msgB) . В документации сказано, что источником и назначением для XORKeyStream может быть один и тот же байтовый массив (также пытались использовать отдельное назначение, но без кубиков), но я не могу понять, что является причиной ошибки. Я использую последнюю версию Go App Engine SDK для OS X Lion.
Поскольку на данный момент я все еще пытаюсь получить код для простого шифрования чего-либо , я просто генерирую случайный ключ и пока не пытаюсь его сохранить.
func generateKey(w http.ResponseWriter, r *http.Request) {
key := make([]byte, 32)
n, err := rand.Read(key)
err = err
if(err != nil) {
fmt.Fprint(w, err)
return
}
if(n != 32) {
fmt.Fprint(w, "Not enough bytes read.")
return
}
c, err := aes.NewCipher(key)
if(err != nil) {
fmt.Fprint(w, err)
}
iv := make([]byte, 32)
n, err = rand.Read(iv)
err = err
if(err != nil) {
fmt.Fprint(w, err)
return
}
if(n != 32) {
fmt.Fprint(w, "Not enough bytes read.")
return
}
sEnc := cipher.NewCFBEncrypter(c, iv)
msg := "text to be encrypted"
msgR := strings.NewReader(msg)
msgB := make([]byte, msgR.Len())
n, err = msgR.Read(msgB)
if(err != nil) {
fmt.Fprint(w, err)
return
}
if(n == 0) {
fmt.Fprint(w, "No bytes read.")
return
}
fmt.Fprint(w, msgB)
fmt.Fprint(w, "<br>")
sEnc.XORKeyStream(msgB, msgB)
fmt.Fprint(w, msgB)
}
Сообщения об ошибках:
2011/08/15 15:15:58 http: паническая служба: ошибка во время выполнения: недействительно
адрес памяти или разыменование нулевого указателя runtime.panic
/private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:1041
runtime.panicstring
/private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/runtime.c:116
runtime.sigpanic
/private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/darwin/thread.c:470
server.generateKey server / server.go: 66 http.HandlerFunc · ServeHTTP
/private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:589
HTTP. * ServeMux · ServeHTTP
/private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:790
appengine_internal.handleFilteredHTTP
/private/tmp/appengine/google_appengine/goroot/src/pkg/appengine_sdk/go_appengine_sdk/appengine_internal/api_dev.go:58
http.HandlerFunc · ServeHTTP
/private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:589
HTTP. * сопп · служить
/private/tmp/appengine/google_appengine/goroot/src/pkg/http/server.go:555
runtime.goexit
/private/tmp/appengine/google_appengine/goroot/src/pkg/runtime/proc.c:178
ИНФОРМАЦИЯ 2011-08-15 15: 15: 58,310 dev_appserver.py:4248] "GET
/ genkey / aes256 HTTP / 1.1 "500 -
Я отправил остальной код для вставки bin, но это просто функция include / init, ничего интересного.