我有一个字母数字字符串,其长度为11,需要被模糊化,其中模糊字符串应该满足以下条件:
- 它应该保持在11个字符的长度。
- 它应该仅由字母数字字符组成(即它可以由10位+26位小写字母+26位大写字母组成)。
- 应该有一种去混淆原始字符串的方法。如何混淆11个字符的字符串?
请注意,我不需要混淆我的整个代码,只需一次一个字符串。
- 核心Java有没有办法做到这一点?
- 我将不胜感激任何帮助,首选的例子,链接到一个例子或指导这样的代码。
- 如果有人知道解决此类问题的第三方软件包,请留下链接。
在此先感谢!
关于Zoul提出的答案/算法:我实现了一切,目前我遇到了隐藏问题;这是我做的:
我目前使用Zoul建议的
random_stri
的值。这仅用于测试目的;请注意,由于我不需要13,所以我将其设置为11长度。由于上述原因,我使用了您使用的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, t, d, N, T, A, G, 6, a, D, H, L]
这打乱数组是硬编码,不断从现在开始,所有程序执行。
我循环的11个字符的输入字符串并且对于每个字符,我从混洗阵列找到所述模糊字符的指数如下:电流焦炭+ ASCII_ARRAY [当前字符的索引。例如,如果我的输入是'1bS0EMtBbK7',那么对于第一个字符'1',我们执行(1 + 114),这给了我们ASCII值为'1'加上114,这给我们(49 + 114) - > 163。
然后,要找到混洗字符数组中的混淆字符的索引,我执行163模数组长度并获取该索引处的字符。
问题是这些值仍然是连续的;即对于2个连续的输入,输出结果也将是连续的!我在这里错过了什么?提前致谢!
你用rot13吗?混淆的目标是什么? – 2013-03-03 07:52:51
混淆的目标是“隐藏”代表连续生成的ID的原始字符串;即如果当前字符串是'1bS0EMtBbK5',那么下一个将是'1bS0EMtBbK6';连续的一代不在我的控制之下。什么是rot13? – boomboom 2013-03-03 08:04:07
原始字符串中允许使用什么字符集? – 2013-03-03 08:04:09