前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >哈希竞猜游戏开发(原生开发)丨哈希竞猜游戏开发说明

哈希竞猜游戏开发(原生开发)丨哈希竞猜游戏开发说明

原创
作者头像
开发weixin-XTKF556
发布2022-06-28 09:32:07
1.1K0
发布2022-06-28 09:32:07
举报
文章被收录于专栏:程序员11程序员11

如何使用哈希值来保护数据?

哈希值大大提高了数据的安全性。正如我已经提到的,它是一个单向的加密函数。一个加密哈希函数需要具备以下几个关键的特性才能被认为是有用的:

1.每个哈希值都是不同的。

2.对于相同的消息,总是生成相同的哈希值。

3.不可能根据哈希值来决定输入。

4.即使对输入的整个哈希值做一个小的更改也会被更改。

哈希值帮助我们查看数据是否被篡改。

例如,您下载了一段重要的信息,要查看数据是否改变,可以通过哈希值算法运行数据,比较数据的哈希值和接收数据的哈希值。

如果两个哈希值都是相同的,则不更改数据,如果哈希值不匹配,则在接收数据之前更改数据。

算法验证

启动代理服务器

启动代理服务器的代码如下:

package main

import (

"fmt"

"github.com/jasonkayzk/consistent-hashing-demo/core"

"github.com/jasonkayzk/consistent-hashing-demo/proxy"

"net/http"

)

var (

port = "18888"

p = proxy.NewProxy(core.NewConsistent(10, nil))

)

func main() {

stopChan := make(chan interface{})

startServer(port)

<-stopChan

}

func startServer(port string) {

http.HandleFunc("/register", registerHost)

http.HandleFunc("/unregister", unregisterHost)

http.HandleFunc("/key", getKey)

fmt.Printf("start proxy server: %s\n", port)

err := http.ListenAndServe(":"+port, nil)

if err != nil {

panic(err)

}

}

func registerHost(w http.ResponseWriter, r *http.Request) {

_ = r.ParseForm()

err := p.RegisterHost(r.Form["host"][0])

if err != nil {

w.WriteHeader(http.StatusInternalServerError)

_, _ = fmt.Fprintf(w, err.Error())

return

}

_, _ = fmt.Fprintf(w, fmt.Sprintf("register host: %s success", r.Form["host"][0]))

}

func unregisterHost(w http.ResponseWriter, r *http.Request) {

_ = r.ParseForm()

err := p.UnregisterHost(r.Form["host"][0])

if err != nil {

w.WriteHeader(http.StatusInternalServerError)

_, _ = fmt.Fprintf(w, err.Error())

return

}

_, _ = fmt.Fprintf(w, fmt.Sprintf("unregister host: %s success", r.Form["host"][0]))

}

func getKey(w http.ResponseWriter, r *http.Request) {

_ = r.ParseForm()

val, err := p.GetKey(r.Form["key"][0])

if err != nil {

w.WriteHeader(http.StatusInternalServerError)

_, _ = fmt.Fprintf(w, err.Error())

return

}

_, _ = fmt.Fprintf(w, fmt.Sprintf("key: %s, val: %s", r.Form["key"][0], val))

}

和缓存服务器类似,这里采用 HTTP 服务器来模拟;

代理服务器监听 18888 端口的几个路由:

/register:注册缓存服务器;

/unregister:注销缓存服务器;

/key:查询缓存 Key;

这里为了简单起见,使用了这种方式进行服务注册,实际使用时请使用其他组件进行实现!

接下来启动缓存服务器:

start proxy server: 18888

启动缓存服务器

分别启动三个缓存服务器:

$ go run server/main.go -p 8080

start server: 8080

$ go run server/main.go -p 8081

start server: 8081

$ go run server/main.go -p 8082

start server: 8082

同时,代理服务器输出:

register host: localhost:8080 success

register host: localhost:8081 success

register host: localhost:8082 success

可以看到缓存服务器已经成功注册;

请求代理服务器获取 Key

可以使用 curl 命令请求代理服务器获取缓存 key:

$ curl localhost:18888/key?key=123

key: 123, val: hello: 123

此时,代理服务器输出:

Response from host localhost:8080: hello: 123

同时,8000 端口的缓存服务器输出:

cached key: {123: hello: 123}

removed cached key after 10s: {123: hello: 123}

可以看到,8000 端口的服务器对 key 值进行了缓存,并在 10 秒后清除了缓存;

尝试多次获取 Key

尝试获取多个 Key:

Response from host localhost:8082: hello: 45363456

Response from host localhost:8080: hello: 4

Response from host localhost:8082: hello: 1

Response from host localhost:8080: hello: 2

Response from host localhost:8082: hello: 3

Response from host localhost:8080: hello: 4

Response from host localhost:8082: hello: 5

Response from host localhost:8080: hello: 6

Response from host localhost:8082: hello: sdkbnfoerwtnbre

Response from host localhost:8082: hello: sd45555254tg423i5gvj4v5

Response from host localhost:8081: hello: 0

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档