今年的新年遊戲到這裡就告一段落了,感謝各位的參與,再次祝大家新年快樂。
遊戲的解析#
首先給出本次遊戲的解謎過程:
感謝 @電腦星人 大佬非常詳細的解析。原本提前寫好了一些解謎的主要過程,但是大佬寫的比我好多了,這裡就直接放出文章的鏈接,想要了解詳細解謎過程的同學可以去看一下😂。
一些數據#
今年的遊戲從 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