Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用校验和生成invite代码_Javascript_Jquery_Encryption_Checksum - Fatal编程技术网

Javascript 使用校验和生成invite代码

Javascript 使用校验和生成invite代码,javascript,jquery,encryption,checksum,Javascript,Jquery,Encryption,Checksum,我正在寻找一个基本的邀请码身份验证系统,它生成一个32位校验和,但每次都被洗牌 我想让大量的人进入一个系统,比如说50万人,我想生成一个邀请代码,通过电子邮件或蜗牛邮件发送。我不想生成一堆代码来存储在表中进行比较,因此代码需要看起来是随机的,但实际上具有相同的校验和 const crypto = require("crypto"); const siphash = require("siphash"); const key = siphash.string16_to_key("This is

我正在寻找一个基本的邀请码身份验证系统,它生成一个32位校验和,但每次都被洗牌

我想让大量的人进入一个系统,比如说50万人,我想生成一个邀请代码,通过电子邮件或蜗牛邮件发送。我不想生成一堆代码来存储在表中进行比较,因此代码需要看起来是随机的,但实际上具有相同的校验和

const crypto = require("crypto");
const siphash = require("siphash");

const key = siphash.string16_to_key("This is the key!");

function createInvite(message, key) {
    return siphash.hash_hex(key, message) + message;
}

function inviteIsValid(combined, key) {
    let checksum = combined.slice(0, 16);
    let message = combined.slice(16);
    let recalc = siphash.hash_hex(message, key);
    return constantTimeEquals(recalc, checksum);
}

function constantTimeEquals(a, b) {
    if (a.length !== b.length) {
        return false;
    }
    let diff = 0;
    for (let i = 0; diff < a.length; i++) {
        diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
    }
    return diff === 0;
}
是否有一个jQuery插件可以对字符串进行重新排序,以便我可以这样做


生成代码>例如123456(但随机顺序) 注册>输入代码>123456:1+2+3+4+5+6=16吗

我想让大量的人进入一个系统,比如说50万人,我想生成一个邀请代码,通过电子邮件或蜗牛邮件发送。我不想生成一堆代码来存储在表中进行比较,因此代码需要看起来是随机的,但实际上具有相同的校验和

const crypto = require("crypto");
const siphash = require("siphash");

const key = siphash.string16_to_key("This is the key!");

function createInvite(message, key) {
    return siphash.hash_hex(key, message) + message;
}

function inviteIsValid(combined, key) {
    let checksum = combined.slice(0, 16);
    let message = combined.slice(16);
    let recalc = siphash.hash_hex(message, key);
    return constantTimeEquals(recalc, checksum);
}

function constantTimeEquals(a, b) {
    if (a.length !== b.length) {
        return false;
    }
    let diff = 0;
    for (let i = 0; diff < a.length; i++) {
        diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
    }
    return diff === 0;
}
您将需要使用类似的方法来创建键控校验和

const crypto = require("crypto");
const siphash = require("siphash");

const key = siphash.string16_to_key("This is the key!");

function createInvite(message, key) {
    return siphash.hash_hex(key, message) + message;
}

function inviteIsValid(combined, key) {
    let checksum = combined.slice(0, 16);
    let message = combined.slice(16);
    let recalc = siphash.hash_hex(message, key);
    return constantTimeEquals(recalc, checksum);
}

function constantTimeEquals(a, b) {
    if (a.length !== b.length) {
        return false;
    }
    let diff = 0;
    for (let i = 0; diff < a.length; i++) {
        diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
    }
    return diff === 0;
}

如果您想防止在线攻击,您需要更安全的东西(即HMAC-SHA256)。

什么可以防止没有收到邀请的人在收到邀请之前猜测邀请代码?这是针对早期邀请的,不是安全层。只是想用代码验证早期用户。我不明白。如果验证不安全,那么它是无用的。任何人都能想出有效的密码。我已经更新了这个问题来澄清我的立场。