Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 如何在go中通过tcp连接发送rsa.PublicKey?_Encryption_Go_Tcp_Rsa - Fatal编程技术网

Encryption 如何在go中通过tcp连接发送rsa.PublicKey?

Encryption 如何在go中通过tcp连接发送rsa.PublicKey?,encryption,go,tcp,rsa,Encryption,Go,Tcp,Rsa,我一直在尝试制作一个简单的RSA加密聊天应用程序。我遇到的问题是必须通过tcp连接发送rsa公钥,据我所知,它是net.Conn,只接受[]字节类型 问题代码 conn.Write([]byte(public_key)) 这是产生我的复杂性的代码。这段代码在函数handleRequest下。我知道conn.Write只能接受[]字节类型,但在这附近有任何地方。如何将公钥传递给我的客户?为了以防万一,我已经包括了我所有的服务器代码。另外,如果您希望获得所有服务器/客户机代码注释,那么我将创建一

我一直在尝试制作一个简单的RSA加密聊天应用程序。我遇到的问题是必须通过tcp连接发送rsa公钥,据我所知,它是net.Conn,只接受[]字节类型

问题代码

 conn.Write([]byte(public_key))
这是产生我的复杂性的代码。这段代码在函数handleRequest下。我知道conn.Write只能接受[]字节类型,但在这附近有任何地方。如何将公钥传递给我的客户?为了以防万一,我已经包括了我所有的服务器代码。另外,如果您希望获得所有服务器/客户机代码注释,那么我将创建一个github链接。谢谢

以防万一服务器代码

 conn.Write([]byte(public_key))
main.go

加密。转到


您需要将
rsa.PublicKey
序列化为
[]字节
。有多种方法可以做到这一点,但我可能会选择JSON

type PublicKey struct {
    N *big.Int // modulus
    E int      // public exponent
}
结构看起来是这样的,其中的任何东西都是a)公共的,b)可以用JSON序列化

type PublicKey struct {
    N *big.Int // modulus
    E int      // public exponent
}

如果要将数据从一个Go程序发送到另一个Go程序(如示例所示),则可以使用包
encoding/gob
将对象序列化(
Encode
)为字节片,并将接收到的字节反序列化(
Decode
)回Go对象。下面是一个例子(也是):

输出类似于:

OK-rsa.PublicKey{N:108816770560195049198336670523712169444878764356860135932739968735275981472697624246781000712903186758249518560683510901399549383480944574041391,E:65537}


发送gob BLOB可能比使用JSON编码更快、更高效,尤其是如果您正在使用大量的JSON编码,但您需要确定这对您来说是否是一个重要因素,以及您更喜欢使用文本(JSON)还是二进制格式(gob或protobufs)进行数据传输。

我有这个问题,答案很简单,序列化whit marshal

private_key, err = rsa.GenerateKey(rand.Reader, 2048)
public_key = &private_key.PublicKey
pubInJason,err:=json.Marshal(public_key)
fmt.Println("public key in jason: ",string(pubInJason))
pub2:=&rsa.PublicKey{}
err=json.Unmarshal(pubInJason,pub2)
fmt.Println("public key from jason: ",pub2)
private_key, err = rsa.GenerateKey(rand.Reader, 2048)
public_key = &private_key.PublicKey
pubInJason,err:=json.Marshal(public_key)
fmt.Println("public key in jason: ",string(pubInJason))
pub2:=&rsa.PublicKey{}
err=json.Unmarshal(pubInJason,pub2)
fmt.Println("public key from jason: ",pub2)