doubao12345 2016-04-27 02:19
浏览 179

如何通过nodejs签名(pkcs#1v1_5)

I tried to communicate with a company A. A use golang as server. me use nodejs.

Encrypted communication process,use hash256 digest, and rsa-key is 1024 bit.

here is a golang code for verify.

func NewRsaVerifier(publicKeyPem string) (verifier *RsaVerifier, err error) {
    block, _ := pem.Decode([]byte(publicKeyPem))

    if block == nil {
        err = errors.New(PUBLIC_KEY_ERR)
        return
    }
    publicKeyInterface, err1 := x509.ParsePKIXPublicKey(block.Bytes)
    if err1 != nil {
        err = errors.New(PUBLIC_KEY_ERR)
        return
    }
    publicKey, ok := publicKeyInterface.(*rsa.PublicKey)
    if !ok {
        err = errors.New(PUBLIC_KEY_ERR)
        return
    }
    return &RsaVerifier{
        publicKey: publicKey,
    }, nil
}

func (v *RsaVerifier) Verify(msg string, signature string) (err error) {
    signatureBytes, err := base64.StdEncoding.DecodeString(signature)
    if err != nil {
        return
    }

    //VerifyPKCS1v15
    hash := sha256.New()
    io.WriteString(hash, msg)
    hashed := hash.Sum(nil)
    err = rsa.VerifyPKCS1v15(v.publicKey, crypto.SHA256, hashed, signatureBytes)
    return err
}

func (a *BrokerAuth) VerifySignature(pubKey, payload string, signature string) error {
    verifier, err := security.NewRsaVerifier(pubKey)
    if verifier == nil {
        return errors.New("未找到指定代理商的鉴权模块")
    }
    err := verifier.Verify(payload, signature)
    if err != nil {
        logger.Error("验证签名错误: %v", err)
        return errors.New("代理商鉴权失败")
    }
    return nil
}

how to sign a string via nodejs , and return true use this golang code.

i try to use sign('RSA-SHA256'), it is false.

this my code:

const SIGN_TYPE = 'RSA-SHA256';
_hashDigest(data_buff) {
  let hash = crypto.createHash(HASH_TYPE);
  hash.update(data_buff);
  return hash.digest();
}

_sign(data_buff) {
  const sign = crypto.createSign(SIGN_TYPE);
  sign.update(this._hashDigest(data_buff));
  var signPramas = {
    key: this._privateKey,
    passphrase: this._passphrase
  };
  return sign.sign(signPramas);
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
    • ¥15 数据可视化Python
    • ¥15 要给毕业设计添加扫码登录的功能!!有偿
    • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
    • ¥15 微信公众号自制会员卡没有收款渠道啊
    • ¥15 stable diffusion
    • ¥100 Jenkins自动化部署—悬赏100元
    • ¥15 关于#python#的问题:求帮写python代码
    • ¥20 MATLAB画图图形出现上下震荡的线条
    • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘