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

时间:2019-01-23 17:56:45

标签: javascript identify generate

您在输入中键入的图片。对于您添加的每个字符(包括特殊字符,例如@ . # ¤ % & ~等),都会根据内容生成唯一的代码。不是哈希!这个唯一的代码只有20个字符长。

示例

  • This is just an example成为H59S7Y54CI6M7S2XX8A9
  • This is another example成为C77KE95HIAJ7VN582758
  • Hello! I am a example string!成为Y8BV572SF8U76RXVB944
  • This is just an example成为H59S7Y54CI6M7S2XX8A9

为什么要这个

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

我为什么要它?

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

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

那么,我该怎么做呢?甚至有可能做到吗?

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

1 个答案:

答案 0 :(得分:1)

我不知道目的,但是直接回答您有关如何基于内容生成唯一代码的问题,您会遇到类似的情况

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,因为对于两个不同的输入,您可能会得到相同的输出(虽然不太可能,但也不太可能),然后又不能完全可逆。 ~引用了bitwise not运算符。