📜  密码学中的凯撒密码

📅  最后修改于: 2021-09-28 10:23:08             🧑  作者: Mango

凯撒密码技术是最早、最简单的加密技术方法之一。它只是一种替换密码,即给定文本的每个字母都被字母表中某些固定数量位置的字母替换。例如,移位 1,A 将被 B 替换,B 将变为 C,依此类推。这种方法显然是以尤利乌斯·凯撒(Julius Caesar)的名字命名的,他显然用它来与他的官员进行交流。
因此,要加密给定的文本,我们需要一个整数值,称为 shift,它表示文本的每个字母向下移动的位置数。
加密可以使用模算术表示,首先将字母转换为数字,根据该方案,A = 0, B = 1,…, Z = 25。通过移位 n 加密字母可以在数学上描述为。

E_n(x)=(x+n)mod\ 26
(具有移位 n 的加密阶段)

D_n(x)=(x-n)mod\ 26
(具有移位 n 的解密阶段)

凯撒密码 3

例子 :

Text : ABCDEFGHIJKLMNOPQRSTUVWXYZ
Shift: 23
Cipher: XYZABCDEFGHIJKLMNOPQRSTUVW

Text : ATTACKATONCE
Shift: 4
Cipher: EXXEGOEXSRGI

凯撒密码算法:
输入:

  1. 一串小写字母,称为 Text。
  2. 0-25 之间的整数表示所需的移位。

程序:

  • 一次遍历给定文本一个字符。
  • 对于每个字符,根据规则转换给定字符,具体取决于我们是加密还是解密文本。
  • 返回生成的新字符串。

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

C++
// A C++ program to illustrate Caesar Cipher Technique
#include 
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


Java
//A Java Program to illustrate Caesar Cipher Technique
class CaesarCipher
{
    // Encrypts text using a shift od s
    public static StringBuffer encrypt(String text, int s)
    {
        StringBuffer result= new StringBuffer();
 
        for (int i=0; i


Python
#A python program to illustrate Caesar Cipher Technique
def encrypt(text,s):
    result = ""
 
    # traverse text
    for i in range(len(text)):
        char = text[i]
 
        # Encrypt uppercase characters
        if (char.isupper()):
            result += chr((ord(char) + s-65) % 26 + 65)
 
        # Encrypt lowercase characters
        else:
            result += chr((ord(char) + s - 97) % 26 + 97)
 
    return result
 
#check the above function
text = "ATTACKATONCE"
s = 4
print "Text  : " + text
print "Shift : " + str(s)
print "Cipher: " + encrypt(text,s)


C#
// A C# Program to illustrate Caesar Cipher Technique
using System;
using System.Text;
 
public class CaesarCipher
{
    // Encrypts text using a shift od s
    public static StringBuilder encrypt(String text, int s)
    {
        StringBuilder result= new StringBuilder();
 
        for (int i=0; i


PHP


Javascript


输出:

Text : ATTACKATONCE
Shift: 4
Cipher: EXXEGOEXSRGI

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

Cipher(n) = De-cipher(26-n)

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

https://www.youtube.com/watch?v=S472gPqwF

-o