Javascript 使用校验和生成invite代码
我正在寻找一个基本的邀请码身份验证系统,它生成一个32位校验和,但每次都被洗牌 我想让大量的人进入一个系统,比如说50万人,我想生成一个邀请代码,通过电子邮件或蜗牛邮件发送。我不想生成一堆代码来存储在表中进行比较,因此代码需要看起来是随机的,但实际上具有相同的校验和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
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)。什么可以防止没有收到邀请的人在收到邀请之前猜测邀请代码?这是针对早期邀请的,不是安全层。只是想用代码验证早期用户。我不明白。如果验证不安全,那么它是无用的。任何人都能想出有效的密码。我已经更新了这个问题来澄清我的立场。