PHP签名的字符串无法用go验证成功?

ltp5343 · 2017-02-20 11:23:00 · 1568 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-02-20 11:23:00 的主题,其中的信息可能已经有所发展或是发生改变。

PHP签名代码:

// sign begin.

$private_key_resource = openssl_get_privatekey($rsa_private_key_string);
$private_key_details = openssl_pkey_get_details($private_key_resource);

if (!isset($private_key_details['key']) || $private_key_details['type'] !== OPENSSL_KEYTYPE_RSA) {
    throw new InvalidArgumentException('This key is not compatible with RSA signatures');
}

$signature = '';
openssl_sign($string_to_sign, $signature, $private_key_resource, OPENSSL_ALGO_SHA256);

// free the key from memory
openssl_free_key($private_key_resource);

$base64url_encode_signature = $this->base64url_encode($signature);
$request_header['App-Signature'] = $base64url_encode_signature.'.'.$string_to_sign;

private function base64url_encode($data)
{
    return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}

go验证代码:

publicKey := LoadRSAPublicKeyFromDisk()
digest := sha256.New()
//digest.Write(bodyByte)
digest.Write([]byte(""))
hashed := digest.Sum(nil)
tt1 := strings.Replace(elementArray[0], "-", "+", -1)
tt2 := strings.Replace(tt1, "_", "/", -1)
repeatChar := strings.Repeat("=", 4 - len(tt2) % 4)
tt2 += repeatChar
ttt,_ := base64.StdEncoding.DecodeString(tt2)
//ttt,_ := base64.StdEncoding.DecodeString(elementArray[0])
logger.AccessLog("ttt1=%X, elementArray[0]=%v, tt2=%v", ttt, elementArray[0])
err4 := rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hashed, ttt)

PHP签名的字符串无法用go验证成功?

大家有没有人遇到过这种问题?


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

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

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