我目前正在创建一个游戏,如果玩家想要玩某个级别,玩家必须提供密码才能解锁它。我现在有以下代码:
var password;
var psd= "abcdefg";
password=prompt('Enter the Passcode: ');
if (password==psd){functions}
但是,我想使密码的输入文本被屏蔽。我还想让它更安全一点,这样玩家就无法通过检查 JavaScript 代码来欺骗自己。有没有一种简单的方法可以做到这一点?
我目前正在创建一个游戏,如果玩家想要玩某个级别,玩家必须提供密码才能解锁它。我现在有以下代码:
var password;
var psd= "abcdefg";
password=prompt('Enter the Passcode: ');
if (password==psd){functions}
但是,我想使密码的输入文本被屏蔽。我还想让它更安全一点,这样玩家就无法通过检查 JavaScript 代码来欺骗自己。有没有一种简单的方法可以做到这一点?
我这样做的方法是使用一个包含按钮和密码输入元素的 html 对话框。例如:
<input type="password" id="pwd">
这将为您提供您所指的黑点。
如果不使用散列函数和服务器端运行时通信,您几乎无法在客户端保护密码。如果您在客户端上进行比较,那么在某些时候密码或哈希必须存在于客户端上。
您可以使用 MD5,它是一种哈希算法。
看看这个: http: //pajhome.org.uk/crypt/md5/
对于安全位,您可以散列正确的密码,然后创建输入的 hast 并检查它们是否相等(例如 md5 或 sha1)(如 md5 之前的答案中发布的那样(我也认为 sha1)不是“安全”,但我怀疑有人会付出这么多努力来解锁这个级别
进一步混淆密码的一个想法是生成用户特定的密码,具体取决于您可能拥有的一些数据,例如电子邮件地址和昵称:
var email = "xyz@abc.com";
var player = "zoidberg";
function createHash(text) {
//a function that returns a unique hash, i.e. MD5 or others (depending on your needs of security)
}
//this is the password that you show the user when he finished a level
var pw = createHash(email + player).substring(0, 8);
//this is the internal hashed passwork
var hashedPw = createHash(pw);
//a function that validates a password that was entered by the user
function validate(userInput) {
if (createHash(userInput) === hashedPw) {
return true;
}
return false;
}
当然,如果有人查看您的 javascript 代码,他仍然可以找出密码创建背后的整个逻辑,但至少您没有用清晰的字母写下您的密码。此外,不同的玩家不能只分享他们的密码,因为每个玩家都有自己的密码。
话虽如此,最安全的方法当然是将整个认证过程转移到服务器端。将您的密码保存在数据库中的某个位置,并进行 AJAX 调用以验证用户输入的密码。
无论您做什么,密码都可以查看,尤其是当一切都在客户端时。
但如果它只是混淆密码,它可以通过多种方式完成。
例如 :
var psd = "\u0041\u0042\u0043\u0044\u0045\u0046\u0047".toLowerCase(); // abcdefg
或者使用 JS 本身的函数:
btoa("abcdefg"); // "YWJjZGVmZw=="
atob("YWJjZGVmZw=="); // "abcdefg"
你可以通过给予<input type='password' >
但这没有意义,因为您将密码显式存储在 java 脚本中。任何查看源代码的人都可以获得密码。唯一的方法是将密码存储在数据库中,并使用 AJAX 来检查密码是否正确。