登录
首页 >  Golang >  Go问答

Golang Base64签名验证 与 CryptoJS的比较

来源:stackoverflow

时间:2024-03-09 19:45:26 331浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《Golang Base64签名验证 与 CryptoJS的比较》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我正在尝试将node.js脚本转换golang。但是,在解码 base64 时,我总是收到错误 "error: invalid base64 data at input byte 40"。有人可以帮助我,已经调试并阅读了几个小时的文档...需要帮助!

// node.js exampe (code copied from facebook instant game sdk example)
const cryptojs = require('crypto-js');
var firstpart = signedrequest.split('.')[0];
firstpart = firstpart.replace(/-/g, '+').replace(/_/g, '/');
const signature = cryptojs.enc.base64.parse(firstpart).tostring(); // <-- fail here
const datahash = cryptojs.hmacsha256(signedrequest.split('.')[1], '').tostring();
var isvalid = signature === datahash;
const json = cryptojs.enc.base64.parse(signedrequest.split('.')[1]).tostring(cryptojs.enc.utf8);
const data = json.parse(json);

上面的代码是来自facebook的示例代码,下面的代码是我编写的。

    parts := strings.Split(signedRequest, ".")
    firstPart := parts[0]
    replaced := strings.Replace(firstPart, "-", "+", -1)
    replaced = strings.Replace(replaced, "_", "/", -1)

    signatureByte, err := base64.StdEncoding.DecodeString(replaced) // <-- ERROR here
    if err != nil {
        fmt.Println("error:", err)
        return false, err
    }
    signature := string(signatureByte)

    dataHash := createHmacSHA256(parts[1], "") // TODO: not sure, to string or hex string?

    isValid := signature == dataHash
    if isValid {
        return true, nil
    }

围棋演示在这里 https://play.golang.org/p/ilsbqamfdv_-


解决方案


首先,去掉 strings.replaces 并仅使用 base64.urlencoding 而不是 stdencoding,因为 url 字母表显然是您的数据所在的位置。

此外,标准的base64数据已填充,但您的数据未填充,因此您需要“原始”编码,即base64.rawurlencoding。这有效:

firstPart := parts[0]
signatureByte, err := base64.RawURLEncoding.DecodeString(firstPart)

https://play.golang.org/p/Pj_LLfirU8M

请参阅 base64 package docsbase64 standard 了解更多信息。

本篇关于《Golang Base64签名验证 与 CryptoJS的比较》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>