安全管理

密码学中的凯撒密码

添加时间:2022-02-27 15:37:23

凯撒密码技术是最早、最简单的加密技术之一。它只是一种替换密码,即给定文本的每个字母都被字母表中一些固定位置的字母替换。例如,移位为 1,A 将被 B 替换,B 将变为 C,依此类推。该方法显然是以朱利叶斯凯撒命名的,他显然用它来与他的官员交流。 

因此,为了加密给定的文本,我们需要一个整数值,称为 shift,它表示文本中每个字母被向下移动的位置数。 

加密可以使用模算术表示,首先将字母转换为数字,根据该方案,A = 0,B = 1,...,Z = 25。通过移位 n 对字母的加密可以在数学上描述为。 

 


E_n (x) = (x + n) mod 26   

(移位 n 的加密阶段)


D_n(x)=(xn)mod 26   

(带移位 n 的解密阶段)


凯撒密码 3


例子 : 

 


文本:ABCDEFGHIJKLMNOPQRSTUVWXYZ

移位:23

密码:XYZABCDEFGHIJKLMNOPQRSTUVW


文本:ATTACKATONCE

移位:4

密码:EXXEGOEXSRGI

凯撒密码算法: 

输入: 

 


一串小写字母,称为文本。

一个 0-25 之间的整数,表示所需的移位。

程序: 

 


一次一个字符地遍历给定的文本。

对于每个字符,根据我们是加密还是解密文本,按照规则转换给定的字符。

返回生成的新字符串。

接收文本(字符串)和移位值(整数)并返回加密文本的程序。 

 



// A C++ program to illustrate Caesar Cipher Technique

#include <iostream>

using namespace std;

 

// This function receives text and shift and

// returns the encrypted text

string encrypt(string text, int s)

{

    string result = "";

 

    // traverse text

    for (int i=0;i<text.length();i++)

    {

        // apply transformation to each character

        // Encrypt Uppercase letters

        if (isupper(text[i]))

            result += char(int(text[i]+s-65)%26 +65);

 

    // Encrypt Lowercase letters

    else

        result += char(int(text[i]+s-97)%26 +97);

    }

 

    // Return the resulting string

    return result;

}

 

// Driver program to test the above function

int main()

{

    string text="ATTACKATONCE";

    int s = 4;

    cout << "Text : " << text;

    cout << " Shift: " << s;

    cout << " Cipher: " << encrypt(text, s);

    return 0;

}

输出: 

 


文字:攻击

班次:4

密码:EXXEGOEXSRGI

如何解密? 

我们可以编写另一个类似于 encrypt 的函数 decrypt,它将向相反方向应用给定的移位来解密原始文本。但是我们可以在模下使用密码的循环属性,因此我们可以简单地观察 

 


密码(n)=解密(26-n)

因此,我们可以使用相同的函数来解密,而不是修改 shift 值,使 shift = 26-shift(请参阅此在 C++ 中运行的示例)。


来源: