go RSA sgin 和 php openssl_sign 不是互通的么 ?

sub_876786132 · · 1061 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

我在go和php对相同内容 进行签名出来的结果一致是不一致的? 请问有没有大神给解答一下啊 ------------------------------------------------------------------------------------------- $data = "Hello, world!"; // 要签名的数据 // 你的 PKCS#1 格式的 RSA 私钥 $privateKeyPEM = '-----BEGIN PRIVATE KEY----- MIIJQgIBADANBgkqhk -----END PRIVATE KEY-----'; 计算数据的 SHA-256 哈希 $hash = hash('sha256', $data, true); // 使用私钥进行签名 $privateKey = openssl_pkey_get_private($privateKeyPEM); if ($privateKey === false) { echo "Error loading private key\n"; } else { $signature = null; openssl_sign($hash, $signature, $privateKey, OPENSSL_ALGO_SHA256); // 将签名转换为 base64 编码字符串 $base64Signature = base64_encode($signature); echo "Signature (base64 encoded): " . $base64Signature . "\n"; } ------------------------------------------------------------------------------------------------------------------------------------------------- data := "Hello, world!" // 要签名的数据 PKCS#8 格式的 RSA 私钥 (这里使用示例私钥,请替换为实际私钥) pkcs8PrivateKeyPEM := `-----BEGIN PRIVATE KEY----- MIIJQgIBADANBgkqhkiG9w0 -----END PRIVATE KEY-----` // 解码 PKCS#8 格式的私钥 block, _ := pem.Decode([]byte(pkcs8PrivateKeyPEM)) if block == nil { log.Fatal("Failed to parse PEM block containing the private key") } // 使用 x509 解析 PKCS#8 格式的私钥 privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes) if err != nil { log.Fatalf("Failed to parse private key: %v", err) } // 将私钥断言为 *rsa.PrivateKey rsaPrivateKey, ok := privateKey.(*rsa.PrivateKey) if !ok { log.Fatal("Not an RSA private key") } // 计算数据的 SHA-256 哈希 hashed := sha256.Sum256([]byte(data)) // 对哈希数据进行签名 signature, err := rsa.SignPKCS1v15(rand.Reader, rsaPrivateKey, crypto.SHA256, hashed[:]) if err != nil { log.Fatalf("Failed to sign data: %v", err) } b64sig := base64.StdEncoding.EncodeToString(signature) // 打印签名 fmt.Printf("Signature: %s\n", b64sig)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1061 次点击  
加入收藏 微博
2 回复  |  直到 2023-10-18 11:22:39
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传