Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 对称双射字符串算法?_Algorithm_String - Fatal编程技术网

Algorithm 对称双射字符串算法?

Algorithm 对称双射字符串算法?,algorithm,string,Algorithm,String,我正在寻找一种算法,可以将一个字符串一一映射到另一个字符串。 我想要一个算法,给定一个字母表,我可以执行对称映射函数 例如: 让我们考虑字母表“A”、“B”、“C”、“D”、“E”、“F”。我想要像F(“ABC”)=“CEA”和F(“CEA”)=“ABC”这样的东西来表示每个N个字母的排列 当然,这样的算法是存在的。如果你知道一个算法,请张贴它的名字,我可以研究它。如果我的要求不够清楚,请告诉我 提前谢谢 编辑1: 我应该澄清一下,我想要足够的熵,使F(“ABC”)等于“CEA”,F(“CEA”

我正在寻找一种算法,可以将一个字符串一一映射到另一个字符串。 我想要一个算法,给定一个字母表,我可以执行对称映射函数

例如: 让我们考虑字母表“A”、“B”、“C”、“D”、“E”、“F”。我想要像F(“ABC”)=“CEA”和F(“CEA”)=“ABC”这样的东西来表示每个N个字母的排列

当然,这样的算法是存在的。如果你知道一个算法,请张贴它的名字,我可以研究它。如果我的要求不够清楚,请告诉我

提前谢谢

编辑1: 我应该澄清一下,我想要足够的熵,使F(“ABC”)等于“CEA”,F(“CEA”)等于“ABC”,但我不希望F(“ABD”)等于“CEF”。注意两个输入字母保持不变,而两个对应的输出字母保持不变


因此,凯撒密码/ROT13或洗牌数组是不够的。然而,我不需要任何“真正的”安全。刚好有足够的熵使函数的输出看起来是随机的。弱加密算法受欢迎。

接受RC4,接受一些密码,您就完成了。(这不是很安全。)

只需创建一个包含两个字段的对象数组——一个字母和一个随机数。对数组进行排序。通过随机数。这将创建一个映射,其中字母表的第i个字母现在映射到数组中的第i个字母。

如果简单的换位或替换还不够,那么听起来您想前进到一个新的位置。在代码中很容易实现,但如果不使用计算机,仍然很难破解。

获取字母表的所有排列,将其洗牌,然后将集合的前半部分映射到下半部分。当然,对大字母表不好。:)


不,想了想,我忘了角色重复。也许可以将输入分成块而不重复字符,并将我的建议应用于所有这些块。

我建议如下


将输入密集编码为正整数-字母表大小为
n
且字符串长度为
m
,您可以将字符串编码为介于零和
n^m-1
之间的整数。在您的示例中,这将是范围
[0215]
。现在对编码的数字执行一次固定,然后再次解码。

我会这样重申您的问题,并为您提供一个重述策略:
“一种替代密码,其中输入的变化导致输出的更大变化”。
字符的阻塞是不相关的——最后,它只是数字之间的映射。我在这里讲字母,但是你可以把它扩展到任何n个字符的块

最简单的方法之一是基于输入的旋转替换。既然您已经看过Vigenere密码,它应该很容易理解。与其使键为静态键,不如使其依赖于前一个字母。也就是说,每个输入通过不同数量的替换进行旋转

可变旋转满足使每个小变化向外推到较大变化的条件。请注意,该算法将只在一个方向上推动更改,以便向末尾的更改具有较小的效果。您可以以两种方式运行该算法(前到后,然后再从后到前),这样每一个更改的明文字母都有可能更改整个字符串


内部旋转策略消除了对密钥的需要,同时当然也失去了大部分加密安全性。不过,这在上下文中是有意义的,因为您的目标是熵而不是安全性。

您可以使用解决此问题


可以在下找到一个Java库。在这里,您可以定义一个正则表达式并加密/解密与此正则表达式匹配的字符串值。

那么您只是想将字符映射到另一个字符?有点像凯瑟密码?我想(但也许那只是我)你必须澄清你的问题。据我所知,身份函数满足您的要求,但情况可能并非如此。加密函数不一定是满射函数,因此它们不符合要求。没错,但更重要的是,加密和描述也不一定是同一个函数(如问题中所述)。对称性指的是键而不是函数。很好,但我认为RC4仍能满足JP的要求。:)很公平。也许比他想要的更复杂?我认为RC4行不通。对于非常小的输入(两个字节或更少),输出包含非常小的熵。事实上,对于小的输入,如果输入是1的差,那么输出将是1的差。它似乎适合于大输入,但我更关心的是3到6个字节的小输入。所以我认为这对我不起作用。谢谢。我喜欢这个。。。但是,当我更改输入中的一个字母时,输出中只有一个字母更改。我想要一个算法,如果输入的一个字母改变,输出的大部分字母都会改变。我猜这是不对称的。