在密码学中,凯撒(Caeser)密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。
这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。
但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。
所以恺撒密码通常被作为其他更复杂的加密方法中的一个步骤。
凯撒密码的
- 加密代换:
- c = Ekey(m) ≡ a, + key(mod 26) 0≤m≤25
- 解密代换:
- m = Dkey(c) ≡ c - key(mod 26) 0≤m≤25
过程比较简单,直接套公式
#include <stdio.h>
#include <assert.h>
//加密算法函数声明
char *encode(char *c_str, int key);
//解密算法函数声明
char *decode(char *m_str, int key);
//加密算法
char *encode(char *c_str, int key)
{
char *p_str = c_str;
assert (c_str);
while (*c_str)
{
if (' ' == *c_str)
{
++c_str;
continue;
}
if ((*c_str < 'A') || (*c_str > 'Z'))
assert(0);
*c_str -= 'A';
*c_str = (*c_str+key)%26;//加密核心算法
*c_str += 'A';
++c_str;
}
return p_str;
}
//解密算法
char *decode(char *m_str, int key)
{
char *p_str = m_str;
assert (m_str);
while (*m_str)
{
if (' ' == *m_str)
{
++m_str;
continue;
}
if ((*m_str < 'A') || (*m_str > 'Z'))
assert(0);
*m_str -= 'A';
*m_str += 26; //避免出现减key后,值为负数
*m_str = (*m_str-key)%26;//解密核心算法
*m_str += 'A';
++m_str;
}
return p_str;
}
int main()
{
//存储明文
char str[128] = "";
int key = 0;
//输入明文
printf("输入一行明文:");
gets(str);
printf("输入秘钥:");
scanf("%d", &key);
//加密
encode(str, key);
//输出密文
printf("密文:%s\n", str);
//解密
decode(str, key);
//输出明文,检验是否解密成功
printf("明文:%s\n", str);
return 0;
}