我有一个长度为 11 的字母数字字符串,需要对其进行混淆,其中混淆字符串应满足以下条件:
- 它应保持 11 个字符的长度。
- 它只能由字母数字字符组成,(即它可以由 10 个数字 + 26 个小写字母 + 26 个大写字母组成)。
- 应该有一种方法可以对原始字符串进行反混淆。
请注意,我不需要混淆我的整个代码,一次只需要一个字符串。
- 在核心 Java 中有没有办法做到这一点?
- 我将不胜感激任何帮助,首选示例、示例链接或此类代码的指南。
- 如果有人知道解决这种情况的第三方包,那么请留下一个链接。
提前致谢!
关于Zoul提出的答案/算法:我实现了一切,目前我遇到了隐藏问题;这就是我所做的:
我目前使用
random_stri
Zoul 建议的值。这仅用于测试目的;请注意,我将其设为 11 长度,因为我不需要 13。由于上述原因,我使用了您使用的 ASCII 数组值,它再次被截断为 11:
[114, 97, 110, 100, 111, 109, 95, 115, 116, 114, 105]
。我准备了一个包含所有 62 个可用字符的数组并将其打乱,这给了我以下打乱的字符数组:
[h,P,y,8,o,n,5,V,X,R,2,g,Q,p,Z,E,s,x,b,Y,m,v,u,c,j , 9, w, 4, I, l, z, B, U, K, S, f, 7, 1, 0, i, k, M, q, e, r, F, 3, C, J, W, O,吨, d、N、T、A、G、6、a、D、H、L]
从现在开始,对于所有程序执行,这个改组的数组都是硬编码的并且是不变的。
我循环了 11 个字符的输入字符串,对于每个字符,我从混洗后的数组中找到混淆字符的索引,如下所示:当前字符 + ASCII_ARRAY [当前字符索引]。例如,如果我的输入是 '1bS0EMtBbK7',那么对于第一个字符 '1',我们执行 (1 + 114),得到 '1' 的 ASCII 值加上 114,得到 (49 + 114) --> 163。
然后,为了在 shuffled chars 数组中找到混淆 char 的索引,我执行 163 模数组长度并获取该索引处的 char。
问题是这些值仍然是连续的;即对于 2 个连续输入,输出结果也将是连续的!我在这里想念什么?提前致谢!