密码学之凯撒加密解密算法

在密码学中,凯撒(Caeser)密码(或称恺撒加密、恺撒变换、变换加密)是一种最简单且最广为人知的加密技术。它是一种替换加密的技术。

这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

所以恺撒密码通常被作为其他更复杂的加密方法中的一个步骤。

凯撒密码的

  • 加密代换:
  • c = Ekey(m)  ≡ a, + key(mod 26) 0≤m≤25

  •         解密代换:
  • m = Dkey(c) ≡ c - key(mod 26) 0≤m≤25


过程比较简单,直接套公式

#include 
#include 

//加密算法函数声明
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;
}


你可能感兴趣的:(现代密码学,脚踏实地做事的C)