base64 是通過網際網路加密和傳輸一組整數的最佳雙向雜湊函式嗎?
我正在寫一個手機遊戲,我需要將我的遊戲數據保存在我的遊戲伺服器上,所以破解者無法在他們的手機上找到和訪問保存的文件(數據)。遊戲數據可以用數字表示,所以如果我使用 Base64 作為一種通過網路安全地傳遞數據和/或防止通過有線發送數據時數據損壞的手段,這並不重要。
我需要一個雜湊函式來防止解密遊戲數據。所以我挖了一點,找到了一些,但我不確定我是否可以和/或應該使用它們。
- MD5 – 我可以將 MD5 用作雙向函式嗎?如果我可以將數據分成 64 位部分,我是否能夠在沒有預先計算的查找表的情況下恢復原始消息?
- Base64 - 可以輕鬆地以兩種方式使用,這很好,因為它很容易,但這對於黑客和破解者來說也很容易。
我不知道 SHA 和其他類型的校驗和和完整性檢查是如何工作的,或者它們是否適合這種數據(數字)。
- MD5 – 我可以將 MD5 用作雙向函式嗎?如果我可以將數據分成 64 位部分,我是否能夠在沒有預先計算的查找表的情況下恢復原始消息?
MD5 是雜湊函式,而不是密碼。換一種說法:您將無法通過簡單地使用散列函式來加密或解密任何內容。
您可以將 MD5 雜湊值相互比較,但這需要您“預先計算”雜湊值,然後將這些雜湊值與這些雜湊值進行比較。但是散列會阻止您了解原始消息(散列是為了防止這種情況發生——除其他外)。恢復最初的散列數據也是如此:你不能。原因很簡單……散列不是一種壓縮工具,可以讓您稍後解壓縮包含的數據。雜湊中沒有足夠的資訊來做到這一點(如果可以從雜湊中恢復原始文件,那麼每個人都會共享簡短的 MD5 消息,而像種子這樣的東西永遠不會被發明出來)。
所以 – 不,您不能使用 MD5 來恢復原始消息。
- Base64 - 可以輕鬆地以兩種方式使用,這很好,因為它很容易,但這對於黑客和破解者來說也很容易。
Base64 只是一種簡單的編碼方法。一種表示數據的方法。它與密碼學無關,因為它能夠提供任何類型的安全性。它既不是散列,也不是密碼。Base64 所做的只是它使您能夠以人類可讀的方式表示和傳輸(主要是二進制)數據。例如:當我想通過電子郵件向您發送二進製文件(如執行檔)但不能(或不想)使用附加該文件的選項時,Base64 會派上用場。使用 Base64,我可以簡單地將數據複製並粘貼為消息……然後您需要在收到它後將其轉換回二進制數據。
長話短說——你不能(也不應該)期望 Base64 提供任何類型的安全性。
我不知道 SHA 和其他類型的校驗和和完整性檢查是如何工作的,或者它們是否適合這種數據(數字)。
SHA 也是一個雜湊,就像 MD5 一樣。散列函式與 CRC32 之類的校驗和有著根本的不同。校驗和主要用於驗證數據的完整性(例如:在數據傳輸期間或數據儲存之後),而加密雜湊函式還針對遠遠超出數據完整性檢查的內容。您可以使用散列來提供校驗和的功能,但校驗和不能提供散列可以提供的所有東西……例如“防碰撞”之類的東西。從這個意義上說,您可以說雜湊“更智能”(但計算起來也更慢)。
給你一個與你所有問題相關的提示:你真正在尋找的是一個“密碼”……一個“加密算法”。
一些謙虛的建議
現在,請不要誤會我的意思……但是您應該真正從頭開始進行研究,因為您顯然已經得到了您一直在探勘的大部分內容絕對錯誤的內容,並試圖以您目前的知識水平在您的軟體中實施密碼學注定會失敗。
為了幫助您了解目前混淆的基本內容,我謙虛地建議您開始閱讀以下兩個內容:
在閱讀(並理解)這些 Wikipedia 文章之後,慢慢地努力直到您可以確信自己知道自己在做什麼和在談論什麼。
在你的路上,像《應用密碼學手冊》(可作為線上版本免費獲得)之類的東西肯定會派上用場,因為一旦你掌握了一些最基本的密碼學基礎知識,它就很容易閱讀。
如前所述,請不要誤會我的意思,也請不要將我的建議視為某種個人冒犯。我只是不想看到您無法保護您的軟體,甚至可能會破壞您遊戲伺服器的安全性,因為沒有人指出您目前被誤導的事實,甚至無法考慮在您的遊戲中實施加密。自己。
**積極的一面:**你很聰明,在做錯事之前會問,這很好。因此,我相信——只要花點時間和精力——你會很快達到一個點,你會回顧這個問題並微笑。然而,在幾週內思考……而不是幾天或幾小時。加密貨幣不是一天就能學會的。相比之下,密碼學實施起來非常棘手,甚至專家有時也無法正確完成,因為他們在某處遺漏了一個微小的細節。獲得一些有用的知識水平,以便您可以在您的遊戲和伺服器中實現它,明天肯定不會發生。
編輯
添加跟隨此答案的部分評論:
- OP:
……您能否建議我找到一種安全級別可接受的簡單加密/解密方法?我更喜歡該方法足夠通用,因此我可以在伺服器端和客戶端實現的同時使用內置庫
- 我:
取決於您使用的編碼語言,但AES幾乎在每個平台上都可用,並且有許多庫(例如:OpenSSL)支持它。因此,這可能是一種選擇……尤其是因為您可能最有可能找到與之相關的“HowTo”教程。除此之外,您還必須考慮諸如“密鑰”和“密鑰交換”(用於身份驗證和加密)之類的想法,但所有這些都過於寬泛,無法將其包含在單個答案或評論中。如果我是你,我會一步一步地做,當有疑問時——在此處詢問或(如果與原始碼相關)在 StackOverflow 處詢問。
- OP:
……我對鍵和雙向鍵的概念有點熟悉,我想我可以通過閱讀一些教程來使用 AES……
那應該完全結束它。