我正在创建一个游戏,如果玩家想要玩某个级别,玩家必须提供密码才能解锁。我现在有以下代码:
var password;
var psd= "abcdefg";
password=prompt('Enter the Passcode: ');
if (password==psd){functions}
但是,我想这样做,以便屏蔽密码的输入文本。我还想让它更安全一点,这样玩家就无法通过检查JavaScript代码来欺骗自己。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:2)
我这样做的方法是使用一个html对话框,其中包含按钮和密码输入元素。 E.g:
<input type="password" id="pwd">
这将为您提供您所指的黑点。
在不使用散列函数和服务器端运行时通信的情况下,您无法在客户端保护密码。如果您在客户端上进行比较,那么在某些时候密码或哈希值必须存在于客户端上。
答案 1 :(得分:1)
你可以使用MD5,它是一种哈希算法。
答案 2 :(得分:1)
对于安全位,你可以散列正确的密码然后创建输入的hast并检查它们是否相等(例如md5或sha1)(在md5之前的答案中发布(我认为sha1也是)不是“安全”,但我怀疑任何人都会花费这么多精力来解锁这个级别
答案 3 :(得分:0)
您可以通过提供<input type='password' >
但是,由于您在java脚本中明确存储密码,因此没有意义。查看源的任何人都可以获取密码。唯一的方法是将密码存储在数据库中,并使用AJAX检查密码是否正确。
答案 4 :(得分:0)
无论您做什么,密码都将被查看,特别是如果一切都在客户端。
但如果只是模糊密码,可以用很多方式完成。
例如:
var psd = "\u0041\u0042\u0043\u0044\u0045\u0046\u0047".toLowerCase(); // abcdefg
或者使用JS本身的功能:
btoa("abcdefg"); // "YWJjZGVmZw=="
atob("YWJjZGVmZw=="); // "abcdefg"
答案 5 :(得分:0)
将密码混淆一点的一个想法是生成用户特定的密码,具体取决于您可能拥有的一些数据,如电子邮件地址和昵称:
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调用以验证用户输入的密码。