PHP Manual
/
安全问题

凯撒密码 - 它是如何工作的

23. 08. 2019

Obsah článku

> **警告:**这篇文章是多年前写的,一些信息可能已经过时或不正确。阅读时请牢记这一点。

凯撒密码是最简单的散列函数之一。在它的时代,它几乎是牢不可破的,但在现代计算机时代,只需要几十秒,甚至几分钟,就可以打破它。它基于一个密钥,根据该密钥对信息进行加密,然后根据该密钥可以再次扩展。因此,密钥是秘密的。在加密的时候,信息可以被看到,将没有任何意义(只是一个杂乱的字符)。破解密码的唯一方法是猜出密钥。

关键

密钥可以是任何数字少于信息本身的整数。通常会给出3个有效数字(所以有999种组合)。每增加一个数字都会增加安全性。为了让2方进行通信,双方都需要知道这个秘密密钥(所以他们必须以某种方式将其安全地传递给对方)。如果钥匙为他们所知而不为对方所知,那么信息即使不安全地传播,也有可能不损害内容,因为潜在的攻击者不知道拿回信息的程序。

为了演示,我将使用密钥123,通常情况下,会使用一些其他的随机数,假设不那么容易猜到。

加密程序

该原理是基于使用密钥将信息中的字符替换成其他字符的想法。我称其为 "角色转换"。

例如,让我们有这样一个我们想要加密的信息。

TAJNA ZPRAVA

现在给每个字符指定一个数字。通常是按字母顺序(其序列号)。我将使用英文字母,所以这一系列的字符。

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

如果我们给每个字符分配一个数字,我们会得到类似的东西。

20-1-10-14-1 26-16-18-1-22-1

现在,关键来了。我们把每一个单独的数字,加上钥匙。我用颜色强调了我在哪里添加的内容。

1 2 3

21 3 13 15 3 3 17 20 4 23 3

注意,当我加密Z字符时,我写的是数字3。这是因为Z是字母表的最后一个字符,所以当它到达终点时,会从行首重新计算。

传递信息

现在我们可以以任何方式传递信息。有时甚至公开。其他人只会看到一串不合逻辑的数字,所以他们可能根本不知道这是某种密码。钥匙本身也增强了安全性,它是秘密的。有时,将信息作为一连串的数字来传输是合适的,有时,将这些数字转换成字符(同样遵循相同的字母系列),然后传输一连串的字符是合适的。这在很大程度上取决于情况。然而,一般来说,数字序列更好,因为很少有人会怀疑它是一个编码的信息。

在收件人处解密

收件人使用同样的程序进行解密。它将每个单独的字符,根据键值减去数字,然后用字母表将所得的值转换为字符。这只是一个反向加密程序。重要的是要知道字符集--也就是说,字符是如何依次排列的。

破解和解密

破解的唯一可能程序是尝试所有潜在钥匙的每一个可以想象的组合。如果我们不知道钥匙的长度,整个过程会变得更加复杂。但一般来说,今天的计算机可以在1秒钟内尝试100个键,所以一个3个字符的随机键需要一分钟的时间来破解。

然而,如果密钥与原始信息一样长或更长,就无法破解,因为每个单独的字符都有自己的密钥,所以必须为每个字符尝试所有的组合。

如果我有一条信息 "取信",它将有11个字符长(空格不计)。如果我想要一个同样是11个字符的钥匙,我使用26个字符的英文字母串,那么就有11^26=1.191817654*10²⁷的组合,一般的计算机会在1.310999419×10²⁶秒=10^20天内破解该钥匙 :)

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
4.
Status:
All systems normal.
2024