初学 Golang 想要用 Golang 实现 PHP 上的 openssl_pkcs12_read 函数

初学Golang想用go写一个api接口实现之前在PHP上做的这段加密功能


        static public function sign($plainText,$pwd){
            $certs = array();
            $sign = "";
            openssl_pkcs12_read(file_get_contents("xxxx.pfx"),$certs,$pwd); //读取公钥、私钥
            openssl_sign($plainText,$sign,$certs['pkey']);//注册生成加密信息  
            return base64_encode($sign);//base64转码加密信息
        }

查了Golang手册

import "golang.org/x/crypto/pkcs12"

尝试了里面的方法都报错,希望大家能解惑一下。

阅读 7.6k
2 个回答
var pfxData []byte
pfxData, err = ioutil.ReadFile(path)
if err != nil {
    return
}
var priv interface{}
//解析证书
priv, cert, err = pkcs12.Decode(pfxData, password)
if err != nil {
    return
}
private = priv.(*rsa.PrivateKey)
str:="test string"
rng := rand.Reader
hashed := sha256.Sum256([]byte(fmt.Sprintf("%x", sha256.Sum256([]byte(str)))))
signer, err := rsa.SignPKCS1v15(rng, private , crypto.SHA256, hashed[:])
if err != nil {
    return "", err
}
return base64Encode(signer), nil
pfxFile, err := ioutil.ReadFile("xxx.pfx")
if err != nil {
    fmt.Println(err)
}
str := "加密串"
private, _, err := pkcs12.Decode(pfxFile, "密码")
h := crypto.Hash.New(crypto.SHA1)
h.Write([]byte(str))
hashed := h.Sum(nil)
rng := rand.Reader
prive := private.(*rsa.PrivateKey)
encodeTxt, _ := prive.Sign(rng, hashed, crypto.SHA1)

 fmt.Println(Base64Encode(encodeTxt))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题