我有一个字符串如下:
- 它的长度是10。
- 它代表基数 36,因此包含数字和大写字母。
- 字符串的来源是数据库生成的序列(即从 1 及以上),正在转换为基数 36。
我的问题是转换为base 36转换的结果也是连续/顺序的;例如:
ID: 1402 -> 000000012Y
ID: 1403 -> 000000012Z
ID: 1404 -> 0000000130
ID: 1404 -> 0000000131
ID: 1404 -> 0000000132
我正在寻找一个简短的简单算法,可以混合基 36 结果,其中:
- 我只能使用允许的 36 个字符(数字和大写字母)。
- 该算法仅用于混淆/混合 36 进制字符串;我不需要加密等。
- 这里的主要问题是结果不会连续。
- 我需要有能力对混淆结果进行反混淆/分解。
我尝试了一些转换字符逻辑,但我陷入了连续结果问题。
我想我需要在这里添加一些数学方面的内容。
我希望任何尽可能简单的想法,如果可能的话,然后使用代码示例。
如果只拥有一个随机顺序包含 36 个字符的数组怎么样?类似于一次性密码本加密,但带有固定密码本:
static String source="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
static String target="Q5A8ZWS0XEDC6RFVT9GBY4HNU3J2MI1KO7LP";
public static String obfuscate(String s) {
char[] result= new char[10];
for (int i=0;i<s.length();i++) {
char c=s.charAt(i);
int index=source.indexOf(c);
result[i]=target.charAt(index);
}
return new String(result);
}
public static String unobfuscate(String s) {
char[] result= new char[10];
for (int i=0;i<s.length();i++) {
char c=s.charAt(i);
int index=target.indexOf(c);
result[i]=source.charAt(index);
}
return new String(result);
}
所以一个 10 个字符的字符串就像"HELLO12345"
变成"0ZCCF2MI1K"
。混淆但未加密
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)