凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。
输出的结果:
凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。
这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。
输出的结果:
你好,凯撒算法的原理很简单,就是对字母进行移位,比如最常用的右移3位。
比如字符'a'变成'd',字母'Z'变成'C'。
以下是一个凯撒算法加解密的示例程序,楼主可以参考:
// Copyright @ quark
// Date: 2010-10-23
using System;
namespace BaiduTest
{
public class KaiSa
{
public static string Encrypt(string text)
{
string encrptString = string.Empty;
foreach (char c in text)
{
if (char.IsLetter(c))
{
char newChar = (char)(c + 3);
if (!char.IsLetter(newChar))
{
newChar -= (char)26;
}
encrptString += newChar;
}
else
{
encrptString+=c;
}
}
return encrptString;
}
public static string Decrypt(string text)
{
string decrptString = string.Empty;
foreach (char c in text)
{
if (char.IsLetter(c))
{
char newChar = (char)(c - 3);
if (!char.IsLetter(newChar))
{
newChar += (char)26;
}
decrptString += newChar;
}
else
{
decrptString += c;
}
}
return decrptString;
}
}
class Program
{
public static void Main(string[] args)
{
string testString = "xyz XYZ ABC abc Hello, World!";
Console.WriteLine("原文:{0}", testString);
string encryptStr = KaiSa.Encrypt(testString);
Console.WriteLine("秘文:{0}", encryptStr);
string decryptStr = KaiSa.Decrypt(encryptStr);
Console.WriteLine("明文:{0}", decryptStr);
Console.ReadKey();
}
}
}
凯撒密码的原理是字母与字母之间的替换。例如26个字母都向后移动K位。若K等于2,则A用C代替,B用D代替,以此类推。
#include stdio.h
#include conio.h
int main(){
int key;
char mingma,mima;
printf("\nPlease input the character:");
scanf("%c",mingma); //输入明码
printf("\nPlease input the key:");
scanf("%d",key); //输入秘钥
if((mingma='A')(mingma='Z'))
mima='A'+(mingma-'A'+key)%26; //大写字母移位
else if((mingma='a')(mingma='z'))
mima='a'+(mingma-'a'+key)%26; //小写字母移位
printf("\n The output is:%c",mima); //输出密码
printf("\nFinished!\n");
getch();
return 0;
}
凯撒密码是一种非常古老的加密方法,相传当年凯撒大地行军打仗时为了保证自己的命令不被敌军知道,就使用这种特殊的方法进行通信,以确保信息传递的安全。他的原理很简单,说到底就是字母于字母之间的替换。下面让我们看一个简单的例子:“baidu”用凯撒密码法加密后字符串变为“edlgx”,它的原理是什么呢?把“baidu”中的每一个字母按字母表顺序向后移3位,所得的结果就是刚才我们所看到的密文。
#include stdio.h
main()
{
char M[100];
char C[100];
int K=3,i;
printf("请输入明文M(注意不要输入空白串)\n");
gets(M);
for(i=0;M[i]!='\0';i++)
C[i]=(M[i]-'a'+K)%26+'a';
C[i]='\0';
printf("结果是:\n%s\n",C);
}
根据苏维托尼乌斯的记载,恺撒曾用此方法对重要的军事信息进行加密: 如果需要保密,信中便用暗号,也即是改变字母顺序,使局外人无法组成一个单词。如果想要读懂和理解它们的意思,得用第4个字母置换第一个字母,即以D代A,余此类推。
同样,奥古斯都也使用过类似方式,只不过他是把字母向右移动一位,而且末尾不折回。每当他用密语写作时,他都用B代表A,C代表B,其余的字母也依同样的规则;用A代表Z。
扩展资料:
密码的使用最早可以追溯到古罗马时期,《高卢战记》有描述恺撒曾经使用密码来传递信息,即所谓的“恺撒密码”,它是一种替代密码,通过将字母按顺序推后起3位起到加密作用,如将字母A换作字母D,将字母B换作字母E。因据说恺撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码。这是一种简单的加密方法,这种密码的密度是很低的,只需简单地统计字频就可以破译。 现今又叫“移位密码”,只不过移动的为数不一定是3位而已。
参考资料来源:百度百科-凯撒密码
这个很简单嘛,用ASC 和 CHR 转换一下嘛
打开Vb,添加2个label控件,2个text控件 1个command按钮
代码如下:
Private Function f(ByVal a As String, k As Integer, n As Integer) As String
If ((Asc(a) = 65 And Asc(a) = 97) Or (Asc(a) = 97 And Asc(a) = 122)) And Len(a) = 1 Then '判断是否为一个字母
'利用公式计算
If Asc(a) = 65 And Asc(a) = 97 Then f = Chr((Asc(a) - 64 + k) Mod n + 64) '当为大写的时候
If Asc(a) = 97 And Asc(a) = 122 Then f = Chr((Asc(a) - 96 + k) Mod n + 96) '当为小写的时候
Else
f = "error" '若不满足要求,则返回错误
End If
End Function
Private Sub Command1_Click()
Dim strold As String
Dim strnew As String
Dim k As Integer
Dim n As Integer
Dim i As Long
Dim tmp As String
k = 3
n = 26
strold = Text1.Text '要加密的字符串
For i = 1 To Len(strold)
tmp = Mid(strold, i, 1)
tmp = f(tmp, k, n)
If tmp "error" Then
strnew = strnew + tmp
Else
MsgBox "字符串中含有非法字符"
Exit Sub
End If
Next i
Text2.Text = strnew
End Sub
Private Sub Form_Load()
Text1.Text = "PROGRAM"
Text2.Text = ""
Command1.Caption = "加密"
Label1.Caption = "源字符串:"
Label2.Caption = "加密字符串:"
End Sub