比较凯撒密码维吉尼亚密码普莱费尔密码的异同点:
1、维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
2、凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经很流行,他的基本思想是:通过把字母移动一定的位数来实现加密和解密。
#include iostream
#include string
using namespace std;
int main()
{
string code;//储存初始字符串
string d_code;//加密后的字符串
int i;
int n; //移位的个数
cout"Enter the string "endl;
cincode;
cout"how many step do you want to move ?"endl;
cinn;
for(i=0;icode.size();++i)
{
if(int(code[i])97)
{
if(int(code[i])+n122)
d_code[i]=int(code[i])+n-26;
else
d_code[i]=int(code[i])+n;
}
else if(int(code[i])+n90)
d_code[i]=char(int(code[i])+n-26);
else
d_code[i]=char(int(code[i]+n));
}
for(i=0;icode.size();++i)
{
coutd_code[i];
}
coutendl;
cout"Code = "codeendl;
return 0;
}
凯撒密码是罗马扩张时期朱利斯• 凯撒(Julius Caesar)创造的,用于加密通过信使传递的作战命令。它将字母表中的字母移动一定位置而实现加密。例如如果向右移动 2 位,则 字母 A 将变为 C,字母 B 将变为 D,…,字母 X 变成 Z,字母 Y 则变为 A,字母 Z 变为 B。
因此,假如有个明文字符串“Hello”用这种方法加密的话,将变为密文: “Jgnnq” 。而如果要解密,则只要将字母向相反方向移动同样位数即可。如密文“Jgnnq”每个字母左移两位 变为“Hello” 。这里,移动的位数“2”是加密和解密所用的密钥。
该程序既可用于加密又可用于解密。只要传入明文和偏移量即可加密,解密需要传入密文和负的偏移量就可以解密。
输出的结果:
凯撒密码由于加解密比较简单,密钥总共只有 26 个,攻击者得到密文后即使不知道密钥,也可一个一个地试过去,最多试 26 次就可以得到明文。
这里不光根据 offset 偏移进行加密,还加上了字符所在的下标进行混合加密。
输出的结果:
漫画:什么是加密算法?
非常朴素的加密方法,被称为 凯撒密码
加密算法可以归结为三大类: 哈希算法 、 对称加密算法 、 非对称加密算法 。
哈希算法
从严格意义上来说, 哈希算法并不属于加密算法 ,但它在信息安全领域起到了很重要的作用。(MD5是单向生成信息摘要的算法)
哈希算法能做什么用呢?其中一个重要的作用就是 生成信息摘要 ,用以验证原信息的完整性和来源的可靠性。
对称加密算法
哈希算法可以解决验签的问题,却无法解决明文加密的问题。这时候,就需要真正的加密算法出场了。
非对称加密算法
windows下查看文件的MD5码
或者使用 HashMyFiles.exe 工具可以生成文件md5.: Calculate MD5/SHA1/CRC32 hash of files
最早的公钥算法是有凯撒大帝发明的,所以也叫凯撒算法,凯撒算法是很简单的算法,它的学名是“单表替换算法”。就如同这个算法名称的字面意思一样,他把一个字母替换成另一个字母,比如:把 "a" 替换成 "b", "c" 替换成 "d" 以此类推, 直到把 "z" 替换成 "a",这里每个字母都备下一个字母替换,所以密钥就是1(如果密钥是2则把 "a" 替换成 "c")。
它不是对称加密算法!