生成20位数字间隔的唯一且可逆的id
Generate unique and reversible id for 20 digits interval
我想从表示数字的字符串中生成一个新的唯一20位字符串
例如:
var uid = key.pseudoHash("00000000000000000000"), // "45021-78054-45021-16875"
uid = key.pseudoHash("00000000000000000001"), // "15751-40213-97315-65348"
..
uid = key.pseudoHash("99999999999999999999"); // "01197-95791-58880-58368"
我怎么能有这样一个伪散列函数,它不会发生冲突,并且可以反转?
多种方法中的一种是使用简单的替换密码:
// guaranteed random!
var key = [1, 3, 3, 1, 8, 3, 5, 7, 2, 9, 0, 2, 8, 2, 9, 7, 7, 8, 1, 7];
function test(str) {
str = str.split("");
for(var i = 0; i < str.length; i++) {
str[i] = (Number(str[i]) + key[i]) % 10
}
return str.join("");
}
console.log(test("00000000000000000000")); // 13318357290282977817
console.log(test("00000000000000000001")); // 13318357290282977818
console.log(test("99999999999999999999")); // 02207246189171866706
为了获得更多的随机性,可以添加更多的混淆和扩散步骤。
任何人都可以轻易扭转这种局面。对于安全算法,请研究密码学。
不要实现它,因为它使用了JS的shonky‘modulus’运算符(我在C#中的单元测试中发现了一个错误(:
var key = [1, 3, 3, 1, 8, 3, 5, 7, 2, 9, 0, 2, 8, 2, 9, 7, 7, 8, 1, 7];
function test(str) {
str = str.split("");
for(var i = 0; i < str.length; i++) {
str[i] = (Number(str[i]) + key[i]) % 10
}
return str.join("");
}
function untest(str) {
str = str.split("");
for(var i = 0; i < str.length; i++) {
str[i] = (Number(str[i]) - key[i]) % 10
}
return str.join("");
}
document.write(test("1000000001")); // 2331835720
document.write("<br></br>");
document.write(untest("2331835720")); // oh dear this doesn't round-trip: actually returns 100000000-9 and not 1000000001
document.write("<br></br>");
document.write( -9 % 10 );
document.write("<br></br>");
您可以通过用模数函数替换%10来避免这种情况(根据下面的C#代码段(:
static private int Mod(int x, int m)
{
return (x % m + m) % m;
}
相关文章:
- 当同一浏览器的两个实例浏览时,Javascript页面如何具有唯一的ID
- 正在为循环创建唯一id
- 在JavaScript中创建全局唯一ID
- 为dropdownlistfor(MVC)中的每个元素设置唯一id
- 如何为动态创建的元素分配唯一的id-Javascript
- 在Chrome for iOS中,附加到用户代理字符串的唯一选项卡ID
- 向具有唯一Id的表添加/删除行
- 基于唯一ID合并geojson
- 如何在javascript中生成唯一的id
- 如何唯一地获取推送 ID
- 多个ID和一个唯一的名称
- 如何为使用 jQuery 动态生成的按钮提供唯一 ID
- 在javascript循环中创建唯一的Id按钮
- 类似系统:循环形成唯一id,得到这些id'使用jQuery/Javascript单独发布
- 使用Javascript为Pyramid的每个块分配唯一的id
- 如何使用jQuery唯一地识别具有相同id的类似动态元素
- Knockout.js中使用的唯一ID;对于“;单选按钮组中的标签属性
- 创建唯一的getElement ID
- 在所有页面中搜索<身体>具有唯一ID
- 如何使id唯一调用显示隐藏方法上的每个id点击在javascript