Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Encryption_Substring_Substitution_String Substitution - Fatal编程技术网

Algorithm 多字符替换密码算法

Algorithm 多字符替换密码算法,algorithm,encryption,substring,substitution,string-substitution,Algorithm,Encryption,Substring,Substitution,String Substitution,我的问题如下。我有一个替换列表,包括字母表中每个字母的一个替换,也有多个字母组的一些替换。例如,在我的密码中,p变成b,l变成w,e变成i,但le变成by,ple变成memi 因此,虽然我可以想出一些简单/天真的方法来实现这个密码,但它不是很有效,我想知道最有效的方法是什么。答案不一定要用任何特定的语言,一般的结构化英语算法就可以了,但是如果它必须是在某种语言中,我更喜欢C++或java或类似的。 编辑:我不需要这个密码是可破译的,一个将所有单个字母映射到字母“w”但将字符串“had”映射到字符

我的问题如下。我有一个替换列表,包括字母表中每个字母的一个替换,也有多个字母组的一些替换。例如,在我的密码中,p变成b,l变成w,e变成i,但le变成by,ple变成memi

因此,虽然我可以想出一些简单/天真的方法来实现这个密码,但它不是很有效,我想知道最有效的方法是什么。答案不一定要用任何特定的语言,一般的结构化英语算法就可以了,但是如果它必须是在某种语言中,我更喜欢C++或java或类似的。 编辑:我不需要这个密码是可破译的,一个将所有单个字母映射到字母“w”但将字符串“had”映射到字符串“jon”的算法应该也可以(然后字符串“Mary had a little lamb.”将变成“Wwww jon w www”)


我希望算法是完全通用的。

一种可能的方法是使用确定性自动机。最接近您的问题和常用的示例是。不同之处在于,您希望在某些转换时发出密码,而不是匹配。通常在每次转换时,您将发射或不发射密码。 在你的例子中

p -> b
l -> w
e -> i
le -> by
ple -> memi
自动机(在类似Erlang的伪代码中)


如果您不熟悉Erlang,
start()
p()
是每个状态的函数。带有
->
的每一行都是一个转换,操作遵循
->
emit()
是发出密码的函数,
next()
是返回下一个字符的函数。对于任何其他字符,
X
都是可变的。

一种可能的方法是使用确定性自动机。最接近您的问题和常用的示例是。不同之处在于,您希望在某些转换时发出密码,而不是匹配。通常在每次转换时,您将发射或不发射密码。 在你的例子中

p -> b
l -> w
e -> i
le -> by
ple -> memi
自动机(在类似Erlang的伪代码中)



如果您不熟悉Erlang,
start()
p()
是每个状态的函数。带有
->
的每一行都是一个转换,操作遵循
->
emit()
是发出密码的函数,
next()
是返回下一个字符的函数。
X
对于任何其他字符都是可变的。

我想您已经确保了字母表是唯一的、明确的?你有完整的字母表吗,比如所有的替换规则?你说的唯一和明确是什么意思?我不需要这个密码是可破译的,一个将所有单个字母映射到字母w,但将字符串“had”映射到字符串“jon”的算法应该也是可行的。我希望算法是完全通用的。嗯,什么?你为什么不需要这个密码才能破译?那对我来说毫无意义。“密码”一词几乎总是与加密结合使用,加密与解密是对应的,因此是可解密的。你在构建一个类似散列的算法吗?不,我在第二人生中构建一个角色扮演“语言”。翻译稿已经被秘密发送到预定的目标,我只需要它对外人听起来很酷。啊,那我就明白了。我猜“kek”是这里的恰当回答:)我想你已经确保了字母表是唯一的,没有歧义的?你有完整的字母表吗,比如所有的替换规则?你说的唯一和明确是什么意思?我不需要这个密码是可破译的,一个将所有单个字母映射到字母w,但将字符串“had”映射到字符串“jon”的算法应该也是可行的。我希望算法是完全通用的。嗯,什么?你为什么不需要这个密码才能破译?那对我来说毫无意义。“密码”一词几乎总是与加密结合使用,加密与解密是对应的,因此是可解密的。你在构建一个类似散列的算法吗?不,我在第二人生中构建一个角色扮演“语言”。翻译稿已经被秘密发送到预定的目标,我只需要它对外人听起来很酷。啊,那我就明白了。我猜“kek”是这里的恰当回答:)我想你已经确保了字母表是唯一的,没有歧义的?你有完整的字母表吗,比如所有的替换规则?你说的唯一和明确是什么意思?我不需要这个密码是可破译的,一个将所有单个字母映射到字母w,但将字符串“had”映射到字符串“jon”的算法应该也是可行的。我希望算法是完全通用的。嗯,什么?你为什么不需要这个密码才能破译?那对我来说毫无意义。“密码”一词几乎总是与加密结合使用,加密与解密是对应的,因此是可解密的。你在构建一个类似散列的算法吗?不,我在第二人生中构建一个角色扮演“语言”。翻译稿已经被秘密发送到预定的目标,我只需要它对外人听起来很酷。啊,那我就明白了。我想“kek”是这里的恰当回答:)这不需要我硬编码转换规则吗?这个自动机看起来非常特定于我给出的例子。我想要的是将替换规则作为输入,而不是代码的一部分。有一种算法可以为您在问题中描述的任何密码生成自动机。制作此算法是解决方案的难点,但您可以从生成Aho-Corasic的算法中得到启发。作为转换次数和要加密字符串大小的函数,它的时间和空间复杂度是多少?我已经有了一个算法,可以实现我想要的,但是它太长了(一个两行句子大约需要0.25~0.5秒)。而且,我不认为语言