2012-11-21 15 views
4

在我學習JavaScript和HTML5的過程中,我正在嘗試構建一個基本測驗應用程序,要求提供可在移動網絡上使用的一些多項選擇題,以及使用PhoneGap的應用程序。隨着問題的提出,結果會存儲在本地。使用JavaScript加密本地存儲的數據

我希望PhoneGap的版本,允許離線模式,所以對數據進行本地存儲的能力是必須。我知道有一個通過PhoneGap提供的本地數據庫 - 所以我想一個選擇是使用PhoneGap爲移動網絡和本地數據庫執行客戶端/服務器。不過,我寧願避免現在就走這條路,因爲這意味着我必須在移動網絡和PhoneGap版本之間管理更多的變體。

顯然不需要網絡銀行級別的安全性,但我需要將結果存儲在本地,但無法輕易讀取,但最重要的是操縱。

我最初嘗試使用HTML5的localStorage,但我很快就意識到,至少我是這樣做的方式,我可以明顯地看到所有我被存儲和通過使用Chrome開發者工具的結果,可以很容易地只需點擊改變價值。

當我走下使用加密的路徑時(I was reading this StackOverflow post with interest),似乎對於這樣的事情,我總是必須在代碼的某個地方定義一個'密鑰',以加密數據,然後使用相同的密鑰解密它。因爲所有的數據都存儲在客戶端,這意味着我所需要做的就是找到這個關鍵字,並根據存儲的數據運行它來處理結果。

+0

您試圖完全緩解什麼威脅?我不能想象任何事情會減輕非技術人員的偶然檢查。我很想被證明是錯誤的。 –

+0

這個練習實際上是關於我學習如何構建HTML5/JS移動Web應用程序,而不是我在應用程序商店中放置的東西。我想我有一些模糊的想法,儘管最終允許在線同步分數,可能是以排行榜的方式與其他玩家進行同步。儘管如此,我仍然想爲遊戲提供一個離線選項,因此也是離線存儲的原因。我知道有人會在離線情況下使用移動網站,但是他們可能會使用該應用程序,我不希望從兩個不同的方式構建每個版本。 – fakeguybrushthreepwood

+0

事實上,人們可以通過編輯webstorage進入瀏覽器並在瀏覽器中更改其分數,這似乎不是一個好策略。爲了說清楚 - 他們可以查看存儲在webstorage中的「記分卡」並操作這些值。即使它使用某種形式的加密我已經發現 - 他們仍然可以按照該字符串操縱它。 – fakeguybrushthreepwood

回答

0

Base64編碼工作嗎?它內置在瀏覽器中並且看起來是加密的。人們一直這樣做cookies。

資源(Mozilla的具體):JSON encode/decode base64 encode/decode in JavaScript

+0

感謝您的評論,但只是看着它不能有人猜測它是base64加密,然後輕鬆解密它? – fakeguybrushthreepwood

+2

它使誠實的人保持誠實,並且您仍然需要base64對localStorage的二進制數據進行編碼,因爲它只支持字符串數據。你確實說過你不需要銀行級別的安全性,對吧? – tjameson

0

CryptoJS AES. Thanks to Leigh

對於非Mozilla瀏覽器的詳細信息和鏈接,請參閱這個問題

var text = "#rawString#"; 
var key = CryptoJS.enc.Base64.parse("#base64Key#"); 
var iv = CryptoJS.enc.Base64.parse("#base64IV#"); 

console.log("Initial String:: "+text); 

var encrypted = CryptoJS.AES.encrypt(text, key, {iv: iv}); 
console.log("Encrypted String:: "+encrypted.toString()); 

var decrypted = CryptoJS.AES.decrypt(encrypted, key, {iv: iv}); 
console.log("Decrypted String:: "+decrypted.toString(CryptoJS.enc.Utf8)); 

Plnkr Demo Link

相關問題