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