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);
}