如何为 rootme web 等挑战制作密码系统

How to make a password system for challenges like rootme web

我正在制作一个网站,您必须在其中回答问题。但是答案并不是很安全。

我已经尝试过 Javascript 混淆器,但我对这种方法并不满意(很容易破解)。 Where/How 我可以存储这些答案吗?

我正在寻找一个类似 root-me 或其他挑战的系统。

如果您有任何建议或资源,请告诉我!

这是我的 Javascript 代码

var Answers = ['abc', 'abcd', 'abcde', 'abcdef']


function checkAnswers(){
    Student_answer = document.f1.studentAnswer.value;
    Teacher_answer = Answers[PageNum];

    if (Student_answer.length == 0 || Teacher_answer.length == 0) {
        Swal.fire ({
            position: 'center',
            icon: 'warning',
            title: 'You Must Enter An Answer',
            text: 'Try again',
            timer: 1500
        });
        return false;
    }
    if (Student_answer == Teacher_answer) {
        Swal.fire ({
            position: 'center',
            icon: 'success',
            title: 'Good Job!',
            text: 'Next anigma...',
            confirmButtonText: '<a href="index1.html" onclick="closepopup()" style="color:#d9d9d9; text-decoration:none">Next</a>',
          });
        } else {
            Swal.fire ({
                position: 'center',
                icon: 'error',
                title: 'Wrong Answer',
                text: 'Try again',
                timer: 1500
            });
        }
}

您可以存储答案的哈希值而不是明文答案本身。

const answer = 'abc'
const encoder = new TextEncoder();
const data = encoder.encode(answer);
const hash = await crypto.subtle.digest('SHA-256', data);

当用户输入答案时,您会对他们的答案进行散列处理,如果散列匹配存储的答案,则答案是正确的。

人们仍然可以通过查找 Google 上的散列来找到答案:为了防止在散列之前使用 R3pTgWu7gy4FsbH6 之类的随机字符串为所有答案添加前缀,或者使用消息验证码(MAC) 散列答案的函数。