解密大猩猩会话Cookie数据

时间:2016-09-25 19:18:52

标签: go gorilla

首先,让我先说一下参加夺旗比赛,我对Go Gorilla Sessions的问题有些困难。我从来没有在Go中编码,所以这很有趣,令人沮丧:)

我有一把密钥。我有一个编码的Cookie。我需要使用我拥有的密钥对cookie进行解码,编辑其中的任何数据,然后使用我更改的数据重新加密以进行挑战。

我已经阅读过Gorilla Sessions Package文档而没有得到任何帮助。

任何人都可以提供帮助,我从哪里开始?

1 个答案:

答案 0 :(得分:2)

查看文档 - 大猩猩提供secure cookie package。 根据您的应用程序架构 - 基本实现可以如下工作:

创建供您的应用使用的会话管理包。为了举例,我们称之为sessionmngr

"github.com/gorilla/securecookie"内,导入sessionmngr

init()包中,使用小写securecookie函数设置http.Request的私有实例。导入包后,将按声明的顺序调用小写的init()函数。 (查看语言spec以获取更多信息)。您将使用此实例对标准库import ( "github.com/gorilla/securecookie" //you will need this later "http" ) //declare private secure cookie var s *securecookie.SecureCookie //initialize it here (taken from the gorilla docs example) func init() { var hashKey = []byte("very-secret") var blockKey = []byte("a-lot-secret") s = securecookie.New(hashKey, blockKey) } 中的cookie进行编码和解码。

s

然后,您将在整个软件包中使用Decode来处理需要对cookie的值进行编码和解码的函数。 securecookie package documentation提供了样板示例。

要满足阅读和修改已加密Cookie的要求,请使用上面示例中设置的Encode实例上的securecookiefunc DecodeAndModify(w http.ResponseWriter, r *http.Request) { //get reference to cookie if set if cookie, err := r.Cookie("cookie-name"); err == nil { value := make(map[string]string) //use Decode to get the value from the cookie if err = s.Decode("cookie-name", cookie.Value, &value); err == nil { //modify the value in some way value["newKey"] = "newValue" //re-encode it if encoded, err := s.Encode("cookie-name", value); err == nil { cookie := &http.Cookie{ Name: "cookie-name", Value: encoded, Path: "/", } http.SetCookie(w, cookie) } } } } 方法。

类似的东西---

let moveAction = SCNAction.move(to: location, duration: 1.5)
    moveAction.timingMode = .easeInEaseOut