以下是一个使用Golang实现RSA密钥交换的示例代码:
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
)
func main() {
// 生成Alice和Bob的密钥对
privateKeyAlice, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
privateKeyBob, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
publicKeyAlice := &privateKeyAlice.PublicKey
publicKeyBob := &privateKeyBob.PublicKey
fmt.Println("Alice's public key:")
printPublicKey(publicKeyAlice)
fmt.Println("\nBob's public key:")
printPublicKey(publicKeyBob)
// Alice将自己的公钥发送给Bob,Bob加密一段消息后发回给Alice
message := []byte("Hello Bob!")
ciphertext, err := rsa.EncryptPKCS1v15(rand.Reader, publicKeyBob, message)
if err != nil {
panic(err)
}
fmt.Println("\nEncrypted message from Bob to Alice:")
fmt.Printf("%x\n", ciphertext)
// Alice解密收到的消息
plaintext, err := rsa.DecryptPKCS1v15(nil, privateKeyAlice, ciphertext)
if err != nil {
panic(err)
}
fmt.Println("\nDecrypted message by Alice:")
fmt.Println(string(plaintext))
}
func printPublicKey(publicKey *rsa.PublicKey) {
publicKeyBytes, _ := x509.MarshalPKIXPublicKey(publicKey)
block := &pem.Block{
Type: "PUBLIC KEY",
Bytes: publicKeyBytes,
}
pem.Encode(os.Stdout, block)
}
这个示例演示了Alice生成自己的RSA密钥对,并将公钥发送给Bob。然后Bob使用Alice的公钥加密一段消息,并将加密后的密文发送回Alice。最后,Alice使用自己的私钥解密收到的消息。
请注意,在实际使用中,还需要更严格地处理错误、进行适当的数据编码和解码,以及确保安全性等方面的考虑。
内容由零声教学AI助手提供,问题来源于学员提问