【问题标题】:Encryption algorithm clarification加密算法说明
【发布时间】:2018-06-20 10:20:19
【问题描述】:

我正在尝试为我的个人项目创建加密器和解析器。
假设我加密拉丁字母如下:

a = a;
b = ab;
c = aab;
....
z = a...ab

在这种情况下,字符串“aaab”可以通过多种方式解密:
交流,aab

但如果我按如下方式加密 alhabet:

a = a;
b = ab;
c = abb;
....
z = a...bb

在这种情况下,任何字符串都可以以一种且唯一的方式解密。

是否有描述这种行为的算法或定理?这是正确的加密还是对于很长的字符串,我会以某种方式获得歧义。

【问题讨论】:

  • 这可能更适合CS
  • 您指的是经典密码的属性,而不是现代加密。您的问题更多关于密码学网站的主题。现代加密是方式过去的类似结构。
  • 谢谢@harold,请您给出一个答案
  • “这将是一个正确的加密吗?”:除了它是不可接受的不紧凑这一事实之外,这种“加密”在一秒钟内就被破解了。

标签: string algorithm math encryption cryptography


【解决方案1】:

您正在寻找uniquely decodable 代码。

唯一可解码代码的一个示例是prefix-free 代码。意思是,没有两个字符AB 使得encode(A)encode(B) 的前缀。这相对容易检查。

如果您的代码是无前缀的,它可以很容易地被解码:您只需获取与某个字符相对应的编码字符串的唯一前缀。比如说,Huffman code 是用于压缩的无前缀代码的流行示例。

反之则不然,因为您的第二个代码不是无前缀的,但仍然是唯一可解码的。有一些算法可以检查代码是否可以唯一解码(例如in this presentation),但我不知道有任何漂亮的重新表述。唯一可解码的代码的一个要求是 Kraft–McMillan inequalily,但它也适用于非唯一可解码的代码(例如您的第一个代码)。

【讨论】:

  • 但是这里a是ab的前缀,ab是abb的前缀。是吗?
  • @EduardRostomyan 没错:a, ab, abb, ... 代码不是无前缀的,但它仍然是唯一可解码的。
  • 所以如果我在第一个示例中将 a = a 更改为 a = b,它将是无前缀且唯一可解释的?
猜你喜欢
  • 1970-01-01
  • 2017-10-28
  • 2017-06-14
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2015-12-09
  • 1970-01-01
相关资源
最近更新 更多