首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个算法有名字吗?(字母之间的距离)

这个算法有名字吗?(字母之间的距离)
EN

Cryptography用户
提问于 2021-01-12 01:21:11
回答 3查看 213关注 0票数 1

有一天我想到了这一点,我想知道是否有以下算法的名称(我不确定“密码”是否是正确的词):

  1. 一次取两个连续的字母(不只是一个)。
  2. 对每个字母执行A1Z26密码,以获得它们在字母表中作为数字的位置。
  3. 取前一步中得到的数字之间的差额。
  4. 通过A1Z26将差额反向转换为字母。如果差异是肯定的,请使用大写字母。如果差异为负值,请使用小写字母。如果您在一行中遇到两个相同的字母(差值为0),请将它们转换为字母Z,因为字母表中没有“0”字母,否则Z将不使用,因为我们正在使用差异(最大的差异将是Z-A -> 26 -1= 25 -> Y)。Z总是大写的。
  5. 重复,直到你到达最后一个字母,在这种情况下,你“包装”从最后一封信到第一封。

例如,"Hello“变成了"CgZcG HcFHs”。

  • H,e -> 8-5=3 -> C
  • e,L -> 5- 12 = -7 -> g
  • l,L -> 12-12=0 -> Z
  • l,o -> 12-15= -3 -> c
  • o,H -> 15 -8=7 -> G
  • w,o -> 23-15=8 -> H
  • o,r -> 15-18= -3 -> c
  • L -> 18 - 12 =6 -> F
  • l,d -> 12 -4=8 -> H
  • d,W -> 4- 23 = -19 -> S

是否有此方法的名称,或类似的算法?算法的其他例子不是单个字母本身,而是2+字母之间的数学运算?

EN

回答 3

Cryptography用户

回答已采纳

发布于 2021-01-12 23:11:48

您所描述的非常类似于自密钥密码,1586年由Blaise de Vigenère首次描述。您的方案与使用单字母密钥的标准自动密钥密码的不同之处在于:

  1. 您使用减法对消息进行加密和加解密,而大多数自动密钥变体则相反。(也就是说,像密码一样工作的“倒置”自动键变体也并不少见。)
  2. 实际上,您使用明文的最后一个字母作为密钥字母(并将第一个密文字母移动到密文末尾)。

现在,移动第一个密文字母对加密方案并没有太大的影响,因为这是一个很容易可逆的操作,而切换加密和解密操作对这个特定的密码也没有太大的影响。

但是,正如所指出的使用明文的最后一个字母作为密钥字母会给您的加密方案带来歧义,因此,除非您已经知道明文的至少一个字母,否则无法对密文进行明确的解密。这可以用两种方式来解释:

  • 要么你的方案是一个模棱两可的无钥匙密码,每一个密文对应26个可能的明文;
  • 或者它有一个基于明文选择的一个字母的秘密密钥,因此需要与加密消息一起以某种方式传递给收件人,以允许明确的解密。

当然,在实践中,这种模糊性对密码的安全性没有多大影响。只要知道加密方法(应该假设,每一个克尔霍夫原理),您的方案就像普通的单字母自动密钥一样容易被破坏,只需尝试所有26个可能的密钥,并查看哪一个密钥生成看起来最可信的明文。

此外,即使一个人不知道加密方法,而且只有一段密文,单字母自动密钥及其变体无疑是一个中等技能的密码分析人员应该尝试的东西--至少在排除简单的凯撒替换和基于频率分析的普通转位密码之后,以及在一个巧合指数或其他类似测试之后,无法揭示任何可能显示更长密钥的周期性。因此,虽然您的方案可以使一个稍微有趣的密码谜题,即使是这样的谜题,它实际上并不比任何其他基本的单字母自动键变体更难打破。

票数 2
EN

Cryptography用户

发布于 2021-01-12 21:53:59

这个答案正在@mentallurg的评论上扩展。

密码的一个重要特性是你可以解密。更确切地说,有一种算法接收密码文本和私钥,并生成正确的明文。(您的方案没有密钥,这是一个单独的问题,称它为密码)。

因此,让我们拿你的密文"CgZcG HcFHs“,并尝试解密它。

代码语言:javascript
复制
C = 3
g = -7
Z = 0
c = -3
G = 7
 
H = 8
c = -3
F = 6
H = 8
s = -19

所以我知道第一个字母和第二个字母之间的距离是3,但我不知道第一个字母实际上是什么。如果我知道第一个字母,那么剩下的将是唯一的决定。如果你的字母表是阿-扎-Z,那么就有52个不同的明文会产生这个密文,而解密算法无法知道52个明文中的哪个是预期的明文。

票数 2
EN

Cryptography用户

发布于 2021-01-12 18:36:40

注:现代密码学几乎没有任何“字母”的概念。位、位串(位序列)、字节(8位)、字节串(字节序列)、整数和多项式是最常见的操作对象。"ω“是一个字母。"א“是一个字母。"‍‍‍“是一个扩展的字素集群,它是Unicode的名称,指的是人们认为任何一个字符,也就是一个字母。"!“不是字母,而是英文字母。这些都不是英文字母。

正如DannyNiu所提到的,方案是一个在整数模26上以CBC模式工作的未键函数。它没有密钥,所以我不称它为密码,它只是一种编码。

你的问题的最后一个有趣的部分是:“还有哪些算法的例子不是单个字母本身,而是2+字母之间的数学运算?”

块密码器对固定大小的数据块(通常是位字符串或字节串)进行操作.例如,流行的AES分组密码一次对128位的块进行操作。如果这些块恰好包含Unicode编码的英文字母,那么它一次使用16个字母,因为每个字母需要8位。

许多散列函数都有它们所操作的内部块大小或容量,它们以块的形式接收数据(≤),并将其扩展到等于该大小(如果较低的话)。

一些流行的流密码器在内部一个大于一个字节的固定大小的数据块上工作,尽管它们的输出流仍然一次只使用一位。例如ChaCha有一个512位的内部块.

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/87475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档