一尘不染

从连续的整数生成随机代码

algorithm

我想从32位正整数生成6个字符的字母数字代码(例如A3SJ8D),其中序列中的每个代码看起来都不像以前的代码。

  1. A3SJ8D
  2. G54FGS

该代码必须是可逆的,以便可以将G54FGS转换回2,例如(1:1映射)。

这种“随机性”不是出于安全目的,而是出于非常简单的混淆。换句话说,该方法不必是“安全的”。

编辑

为了明确起见,我知道无符号32位整数(2 ^ 32)-1的最大可能值超过了使用10位数字和26个字母的6个字符的字母数字代码的最大可能值,(36 ^
6)-1。因此,要编码的正整数一定不能溢出由代码集可用字符数确定的界限。

回答了!

这是一个基于Javascript的简单代码示例,基于以下@nwellnhof的公认答案。

var Skip32 = require('skip32').Skip32,
    key = "0123456789".split("").map(function(c) { return c.charCodeAt(0) }),
    cipher = new Skip32(key),
    codelen = 6,
    radix = 36,
    max = Math.pow(radix,codelen);

function numToCode(num) {
    while ((num = cipher.encrypt(num)) >= max) {}
    return num.toString(radix).toUpperCase();
}

function codeToNum(code) {
    var num = parseInt(code,radix);
    while ((num = cipher.decrypt(num)) >= max) {}
    return num;
}

阅读 329

收藏
2020-07-28

共1个答案

一尘不染

我将使用SKIP32密码,这是一个基于Skipjack的32位分组密码。只需选择一个随机密钥,加密整数,输出基地36你可以找到在C实现的结果在这里

2020-07-28