今年的新年游戏到这里就告一段落了,感谢各位的参与,再次祝大家新年快乐。
游戏的解析#
首先给出本次游戏的解谜过程:
感谢 @电脑星人 大佬非常详细的解析。原本提前写好了一些解谜的主要过程,但是大佬写的比我好多了,这里就直接放出文章的链接,想要了解详细解谜过程的同学可以去看一下😂。
一些数据#
今年的游戏从 1 月 20 号开始一共持续了 12 天,按照规则提交密码 49 次,一共有 5 位同学拿到了红包。在 1 月 21 号 13 点 23 分,谜题首先由 @FantasyLand の 暗梦 同学成功破解。另外有位同学使用脚本来遍历提交答案,一共提交了 540 次答案,由于事先设置了 QPS 限制再加上发现得比较及时所以只对这位同学的 IP 做了短暂的限制。
后话#
为什么隐写信息是 BGR 顺序而不是 RGB 顺序#
这个问题确实是我的疏忽>﹏<,因为隐写脚本(LSB-Steganography)使用了 OpenCV,而 OpenCV 在读取图片时默认是按照 BGR 格式来读取的,所以隐写的信息自然也是 BGR 顺序。如果想要变成 RGB 顺序,则需要对隐写脚本进行如下修改:
def main():
args = docopt.docopt(__doc__, version="0.2")
in_f = args["--in"]
out_f = args["--out"]
in_img = cv2.cvtColor(cv2.imread(in_f), cv2.COLOR_BGR2RGB) # 将 BGR 格式转为 RGB 格式。
steg = LSBSteg(in_img)
lossy_formats = ["jpeg", "jpg"]
if args['encode']:
# Handling lossy format
out_f, out_ext = out_f.split(".")
if out_ext in lossy_formats:
out_f = out_f + ".png"
print("Output file changed to ", out_f)
data = open(args["--file"], "rb").read()
res = cv2.cvtColor(steg.encode_binary(data), cv2.COLOR_RGB2BGR) # 将 RGB 格式转为 BGR 格式,不然图片会反色。
cv2.imwrite(out_f+'.png', res)
elif args["decode"]:
...
这样生成出来的图片隐写信息就是 RGB 顺序了。
此文由 Mix Space 同步更新至 xLog
原始链接为 https://www.vinking.top/posts/confetti/new-year-game-riddle-answer-2023