如何根据内容生成唯一代码?

How do I generate a unique code based on the content?

您正在输入的图片。对于您添加的每个字符(包括特殊字符,如 @ . # ¤ % & ~ 等),将根据内容生成一个唯一代码。不是哈希!此唯一代码的长度仅为 20 个字符。

例子

为什么我想要这个

我正在做一个项目,访问者可以登录他们自己的帐户(如果他们有的话)。一旦他们输入他们的电子邮件地址和密码,一个唯一的代码就会根据字符串生成(在一个隐藏的输入中),这样网站就可以识别用户并从数据库中获取正确的数据。

我为什么要它?

我使用 256 位 AES 加密数据库中的所有内容,每个用户都有自己的加密密钥。为了识别输入的电子邮件地址和密码(在他们第一次登录之前使用网站加密密钥加密),这个唯一代码(基于字符串)将识别登录。因此,不可能使用网站加密密钥来识别登录。因此我的问题。

这可能存在安全风险,因为唯一代码将存储在 MD5 或 Whirlpool 中的哈希数据库中,但我不知道如何以其他方式识别登录。如果你知道更好的方法,请告诉我。

那么,我该如何实现呢?甚至可以做到吗?

我知道如何生成不基于内容的唯一代码(例如,生成密码),但我不知道如何生成基于内容的唯一代码。

我不知道目的,但是直接回答你关于如何根据内容生成唯一代码的问题,你可以得到这样的东西

function symmetricEncode(content){
  var output = [];
  for (var i=0; i<content.length; i++){    
    output.push(String.fromCharCode(~ content[i].charCodeAt()));
  }
  return output.join("");
}

var string = "Hey you there";
var code = symmetricEncode(string);

console.log("string to code: ", string);
console.log("code: ", code);
console.log(typeof code);
console.log("decoded code: ", symmetricEncode(code));

这段代码不仅仅是一个散列,因为你可以解码它,这意味着它是唯一的,也就是说,对于每个输入,你都会得到一个唯一的输出

其他类型的哈希(例如将所有字符相乘)do not fulfil these criteria, because for two different inputs you may get the same output (very unlikely though possible), not being then purely reversible. The ~ makes reference to the bitwise not 运算符。