开发者社区 问答 正文

前端页面调用文件上传,回调接口通过验签方式,验签失败。

遵循规则(url_decode(path) + query_string + ‘\n’ + body)

验签内容如下:
/oss/callbackMethod\nfilename=dp_dev/wmg11.jpg&size=71721&mimeType=image/jpeg&height=582&width=667


KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = BinaryUtil.fromBase64String(publicKey);
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
java.security.Signature signature = java.security.Signature.getInstance("MD5withRSA");
signature.initVerify(pubKey);
signature.update(content.getBytes());
boolean bverify = signature.verify(sign);

展开
收起
zhangyuwang 2018-11-07 19:24:03 1098 分享 版权
阿里云 AI 助理回答

要对提供的验签内容进行验证,遵循您提及的规则(url_decode(path) + query_string + ‘\n’ + body),请按照以下步骤操作:

  1. 准备数据

    • Path: 已给定为 /oss/callbackMethod,无需解码,因为路径中没有百分号编码。
    • Query String: 给定为 filename=dp_dev/wmg11.jpg,同样这里没有需要URL解码的部分。
    • Body: 本例中未直接给出Body部分,但根据上下文,若无特别说明,此处可假设Body为空。在实际应用中,Body应包含POST请求的具体数据内容。
  2. 构造待签名字符串: 根据规则组合各部分,得到待签名字符串:

    /oss/callbackMethod\nfilename=dp_dev/wmg11.jpg\n
    

    注意最后有一个换行符\n,表示Path和Query String之间以及Query String结束与假设的空Body之间各有一个换行。

  3. 获取并解码签名: 验证签名时,需要从HTTP请求头中的Authorization字段获取原始签名,并对其进行Base64解码以得到用于对比的签名值。此步骤需在具体实现环境中完成,当前信息未提供具体的签名值,因此无法直接演示解码过程。

  4. 使用公钥验证签名

    • 首先,通过请求头中的x-oss-pub-key-url获取公钥URL,并执行Base64解码以得到真实的公钥地址。
    • 然后,利用公钥、待签名字符串的MD5值及解码后的签名值,采用RSA算法验证签名的有效性。这通常涉及调用加密库函数,如Python示例中使用M2Crypto库的rsa_verify方法。

注意:由于缺少实际的签名值和公钥信息,以上步骤仅提供了验证流程的指导框架。在实际操作中,确保所有必要参数齐全,并正确执行每一步骤,才能有效验证签名的真实性。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答