给我一个Go和php 通讯的 RSA加密源码
时间: 2024-05-03 09:16:52 浏览: 12
以下是一个简单的 Go 和 PHP 通讯的 RSA 加密源码示例:
Go 代码:
```go
package main
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"fmt"
"io/ioutil"
"net/http"
)
func main() {
// 从文件中读取公钥
pubPEM, err := ioutil.ReadFile("public.pem")
if err != nil {
panic(err)
}
pubBlock, _ := pem.Decode(pubPEM)
pubKey, err := x509.ParsePKCS1PublicKey(pubBlock.Bytes)
if err != nil {
panic(err)
}
// 生成随机数据
data := make([]byte, 32)
_, err = rand.Read(data)
if err != nil {
panic(err)
}
// 使用公钥加密数据
encryptedData, err := rsa.EncryptPKCS1v15(rand.Reader, pubKey, data)
if err != nil {
panic(err)
}
// 发送加密后的数据到 PHP 服务器
resp, err := http.Post("http://localhost:8000/decrypt.php", "application/octet-stream", bytes.NewReader(encryptedData))
if err != nil {
panic(err)
}
// 读取 PHP 服务器返回的解密后的数据
decryptedData, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Printf("加密前的数据:%x\n", data)
fmt.Printf("加密后的数据:%x\n", encryptedData)
fmt.Printf("解密后的数据:%x\n", decryptedData)
}
```
PHP 代码:
```php
<?php
// 从文件中读取私钥
$privateKey = '-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCzB5hJw7Z8G3q3V7PzJkC5t7y8tQ9uEgPfN/47MOTeN8vNQ2fN
AfnbY1W/8Czv3kUdOC6nIcGZf4m4v4aDzNu6U2QlUkGl6UvS6pO6g0o+IAwA0Zf4
1FVz1M+Y2S8zPvU6S+oCk/ggA+Tt8ImvLZ2ePt0sIYgO3OyGv3q3L/PHQQIDAQAB
AoGADeKxH3aVJ+YJYd7R8NcH9QdLgOGhQ2CwVJj+mkalgeGg5cs5z5Y5K30n5AiF
BgK7VY+1t8h7V9gPmtE3GqCp+D8eOZfJgZrH1a5fjK5Ob5G5p5J+J7+tK0Jt8F2Q
Q1t6FWL+6JYU6yQlXKvU4d4HufStJf8ZwfcInAUvU3z3qkECQQDyJcK99sF+JNQ2
H1e8jwW+eyvI3oq3pOYdI8s1sXsXQJQ2RraL1j8Ww0oKvS6U7J6UzC6y2KjF1d4f
4B0L0oZJAkEAxKfmyr1Y5Dn0nW5p5GmzA7l0Kt5hZ2QgJ1xKjV7MzjB8bsV7yCtP
Ej3pCtGZfVwZuA5r5FhE0zCt5HR5VLB9pQJBAKLOJj0Q0zxZ1x2L2LLcQOHPdYV7
8Pv9u3qfEi5hL1LZ8a0L+3qg3zEYrsHcJ8zv9XQg/2bFmTqwZj8vZiDmOCMCQG4n
QzC6Fv9X4zfk4nL4GZc8lZv4pS+6OYU0k0AG6yv1X9f1+4JF4aMw0ZvUJZqk3C3f
zjW8sHbXlQ64T/B+OZECQDr8OvPuxH7VjKf1YR7V/8v+u9q3h3gDpNwN8eblZ+gG
eLGCz5J5W5+5k5p7mzdGJzKowmQ8F/b1CmYU6Lk/6S4=
-----END RSA PRIVATE KEY-----
';
$privateKey = openssl_pkey_get_private($privateKey);
// 从请求中读取加密后的数据
$data = file_get_contents("php://input");
// 使用私钥解密数据
openssl_private_decrypt($data, $decryptedData, $privateKey);
// 发送解密后的数据回到 Go 程序
header('Content-Type: application/octet-stream');
echo $decryptedData;
```
注意事项:
- 请确保你的公钥和私钥是一对。
- 请确保你的 PHP 程序在收到加密后的数据后能够正确地使用私钥解密数据。