-3

我目前正在创建一个游戏,如果玩家想要玩某个级别,玩家必须提供密码才能解锁它。我现在有以下代码:

var password;
var psd= "abcdefg";
password=prompt('Enter the Passcode: ');
if (password==psd){functions}

但是,我想使密码的输入文本被屏蔽。我还想让它更安全一点,这样玩家就无法通过检查 JavaScript 代码来欺骗自己。有没有一种简单的方法可以做到这一点?

4

6 回答 6

2

我这样做的方法是使用一个包含按钮和密码输入元素的 html 对话框。例如:

<input type="password" id="pwd">

这将为您提供您所指的黑点。

如果不使用散列函数和服务器端运行时通信,您几乎无法在客户端保护密码。如果您在客户端上进行比较,那么在某些时候密码或哈希必须存在于客户端上。

于 2013-06-30T10:31:49.993 回答
1

您可以使用 MD5,它是一种哈希算法。

看看这个: http: //pajhome.org.uk/crypt/md5/

于 2013-06-30T10:27:18.900 回答
1

对于安全位,您可以散列正确的密码,然后创建输入的 hast 并检查它们是否相等(例如 md5 或 sha1)(如 md5 之前的答案中发布的那样(我也认为 sha1)不是“安全”,但我怀疑有人会付出这么多努力来解锁这个级别

于 2013-06-30T10:30:13.257 回答
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 调用以验证用户输入的密码。

于 2013-06-30T11:36:17.350 回答
0

无论您做什么,密码都可以查看,尤其是当一切都在客户端时。

但如果它只是混淆密码,它可以通过多种方式完成。

例如 :

var psd = "\u0041\u0042\u0043\u0044\u0045\u0046\u0047".toLowerCase();  // abcdefg

或者使用 JS 本身的函数:

btoa("abcdefg");      // "YWJjZGVmZw=="

atob("YWJjZGVmZw=="); // "abcdefg"
于 2013-06-30T10:40:10.943 回答
0

你可以通过给予<input type='password' >

但这没有意义,因为您将密码显式存储在 java 脚本中。任何查看源代码的人都可以获得密码。唯一的方法是将密码存储在数据库中,并使用 AJAX 来检查密码是否正确。

于 2013-06-30T10:30:34.650 回答