我不需要它太安全。即使md5,通常是破損的,比我需要的更安全(只要在2分鐘內找不到碰撞,應該是100%)。在線遊戲:JavaScript中的快速不太安全的密碼哈希/校驗和功能?
我需要它用於我們將在本週末的黑客馬拉松中製作的視頻遊戲。我們有一個模擬遊戲核心部分的服務器,我們需要同步多個玩家(我們使用socket.io和nodejs作爲彗星服務器),並確保沒有玩家通過修改值來作弊。因此,校驗和(如果他們發送有效校驗和,將與服務器中生成的校驗和進行比較,則用戶具有正確的東西)。
所以,只要校驗和不是太容易反向工程,就應該沒問題。因爲我沒有太多在線遊戲的經驗(雖然我在C,Java,Python甚至PHP中使用過一段時間的套接字,但是),如果有人可以推薦一些關於一般性閱讀的話,那將是非常棒的。模式遵循。所有我發現了一個論文,解釋的帝國時代2的在線還挺吸:)
非常感謝
更多ellaboration原因:
每個客戶都有變量(包含屬性等對象)。事件發生在客戶端,因此狀態發生變化。根據狀態,變量會發生變化。所以,客戶端將變量的狀態和哈希值發送到服務器。服務器從客戶端獲取新狀態(例如,可能是「按下右箭頭」),檢查它們是否有效,然後在變量上生成新值。檢查哈希是否與客戶端發送的哈希相對應。如果沒有,它會向客戶端發送一個同步消息,爲他的變量賦予新的值。然後將其全部保存並將共享變量上的更新發送給其他客戶端。 (因爲不是所有變量都可以被其他客戶端看到)
散列主要用於同步。我不知道這是不是最好的方法,但是這是想到的。但是,如果它們只是一個簡單的校驗和(例如CRC32),而不是更難以僞造的東西,我不想讓它們與這些值相混淆。這樣我覺得同步會更容易。
同樣,我沒有關於電子遊戲網絡的經驗,但是從我做過的其他事情來看,這聽起來符合邏輯。我感謝所有反饋。
你想加密什麼?輸入/輸出數據流?你想要一些獨特的標識符?也許,你想生成一個鹽?請更確切地說。 – Deele 2011-03-30 10:42:50
現在闡述更多。感謝您的關注。 – Mamsaac 2011-03-30 10:56:42
爲了完整起見,在基本的2.4 GHz Core2 PC上使用單個內核可以在約14秒內(平均)找到MD5衝突。這比「兩分鐘之內」要低。這如何適用於你的情況尚不清楚。 – 2011-03-30 11:37:13