У меня есть клиентский и серверный код. Я должен принять сообщение от клиента, зашифровать его и отправить на сервер. Но когда я печатаю это зашифрованное сообщение на стороне сервера, оно не совпадает с тем, что было на стороне клиента. Вот как я это делаю:
Сначала я шифрую сообщение с помощью функции rsa.EncryptOAEP()
. Сообщение является членом структуры, которая также имеет другие члены. Я кодирую эту структуру с помощью пакета gob и отправляю ее на сервер.
Вот фрагмент кода на стороне клиента:
func SocketClient() {
conn, err := net.Dial("tcp", ":9000")
if err != nil {
log.Fatalln(err)
}
defer conn.Close()
enc := gob.NewEncoder(conn)
buff, _ := input_reader.ReadBytes('\n') //this is the message to be encrypted
label := []byte("")
hash := sha256.New()
ciphertext, _ := rsa.EncryptOAEP(
hash,
rand.Reader,
&receiverPublicKey,
buff,
label,
)
fmt.Printf("%s",ciphertext) //this is to check if the text is same or not
block.Message = ciphertext //this is the struct to be sent over network
enc.Encode(block)
}
Вот код на стороне сервера:
func handleConn(conn net.Conn) {
defer conn.Close()
dec := gob.NewDecoder(conn)
dec.Decode(&block)
fmt.Printf("%s",block.Message) //it is different from the text printed in client side code
}
Когда я печатаю сообщение, оно должно быть одинаковым с обеих сторон. Так есть ли какой-то стандартный протокол или что-то для работы с зашифрованными текстами?