C语言实现移位密码

这篇具有很好参考价值的文章主要介绍了C语言实现移位密码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.认识密码学

加密算法分为对称加密和非对称加密:

  1. 对称加密:对称加密算法使用相同的密钥进行加密和解密操作。发送方和接收方需要共享同一个密钥,这个密钥被称为对称密钥。对称加密算法的优势在于加密和解密速度快,适用于大量数据的加密。然而,对称加密的缺点是密钥分发问题。当通信双方需要建立安全通信时,他们需要以安全的方式共享密钥,否则第三方可能会截获密钥并破解加密的数据。常见的对称加密算法有:AES(Advanced Encryption Standard)、DES(Data Encryption Standard)、3DES(Triple DES)和Blowfish等。

  2. 非对称加密:非对称加密算法使用一对密钥,即公钥和私钥。公钥是公开的,可以被任何人获取;私钥则需要严格保密。使用公钥加密的数据只能用对应的私钥解密,反之亦然。非对称加密解决了对称加密中的密钥分发问题,因为公钥可以公开,不需要安全地传输。然而,非对称加密算法的缺点是加密和解密速度较慢,不适合对大量数据进行加密。常见的非对称加密算法有:RSA、ECC(Elliptic Curve Cryptography)、ElGamal和DSA(Digital Signature Algorithm)等。

在实际应用中,通常会将对称加密和非对称加密结合使用。例如,使用非对称加密算法安全地传输对称密钥,然后使用对称加密算法对数据进行加密。这样既保证了密钥的安全传输,又能高效地加密和解密数据。

二.移位密码

   移位密码(Caesar Cipher)也叫凯撒密码是一种简单的加密技术,它通过将明文中的每个字母按照指定的位数进行移位,从而生成密文。例如,在一个"左移3位"的移位密码中,文中的每个字母都向左移动3个位置,即A变成D,B变成E, 以此类推。移位密码可以被轻松破解,因此现在已经很少用于实际的加密通信中。

三.移位密码原理

2.1 名词解释

  • 明文:发送发想要发送的信息;
  • 密文:经过加密后的信息;
  • 密匙:加密时移动的位数k。
    (这里解释是我个人理解,非标准定义)

2.2 移位加密

具体来说,移位加密通常将明文中的每个字母替换为其在字母表中向后(或向前)移动固定数量的位置得到对应的密文字母。
步骤如下:

  • 选择一个偏移量 k,确定每个字符需要向后移动还是向前移动。
  • 对于明文中的每个字符,根据偏移将其向后或向前移动相应的位数,并将结果记录下来。
  • 将所有移位后的字符连接起来,得到密文。

例如:这里假设明文是 word ,现在的密匙(偏移量)为3,那么我们加密后的密文就是 zrug 。(这里需要结合字母顺序表查看,顺序表由发送发与接收方约定定义,无第三方知道) 这里的偏移量表示字母移动的距离,当偏移量为正数时,字母向后移动;当偏移量为负数时,字母向前移动。

2.3 移位解密

具体来说,移位解密通常将密文中的每个字母替换为其在字母表中向后(或向前)移动固定数量的位置得到对应的明文字母。
步骤如下

  • 选择一个偏移量 k,确定每个字符需要向后移动还是向前移动。
  • 对于密文中的每个字符,根据偏移将其向后或向前移动相应的位数,并将结果记录下来。
  • 将所有移位后的字符连接起来,得到明文。

例如:如果现在的密文是 zrug ,密匙为3,那么明文就是 word

2.4 补充描述

  • 现实生活中,密码是不存在空格的,因为英文大家都知道,传输一篇文章空格要占许多,对发送加密造成干扰,所以约定去掉字母。
  • 补充本次实验所需的字母顺序表
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

这里我们为了方便理解,就用小写。

四.优缺点

优点:

  • 简单易懂
  • 易于实现和使用

缺点:

  • 安全性较低,容易受到暴力破解攻击
  • 容易受到频率分析攻击

缺陷原因分析:

  • 只是将明文中的字符按照一定规则进行移动,不涉及其他复杂的操作;
  • 没有对明文中不同字符出现的频率进行混淆处理。

五.C语言实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define Maxsize 50            //定义信息最大量

//加密函数
void jiami(char *&p,int n,int h)
{
	printf("密文:");
	for(int i=0;i<h-1;i++)               //循环输出数组的每一个字符
	{
		printf("%c",(char) ((p[i] + 'a' - 97) + n - 97) % 26 + 97);
	}
	printf("\n");
}

//解密函数
void jiemi(char *&p)
{
	for (int i = 1; i < 26; i++) {
		printf("k为%d的明文:", i);            //循环输出数组的每一个字符
		for (int j = 0; j < strlen(p); j++) {
			printf("%c", (char) (((p[j] + 'a' - 97) + 26 - i - 97) % 26 + 97));
			//对应ASCLL码表,但是我们自定义了字母顺序表,需要转换范围
		}
		printf("\n");
	}
}

int main()
{ 
	char str1[Maxsize],str2[Maxsize];
	char *p=str1,*q=str2;
	int n;
	printf("请输入明文:");            //加密测试
	fgets(str1, Maxsize, stdin);
    int len1=strlen(str1);
	printf("请输入移位密匙:");
	scanf("%d",&n);
	jiami(p,n,len1);
	printf("------------------");
	printf("\n");
	printf("请输入密文:");             //解密测试
	printf("\n");
	scanf("%s",str2);
	jiemi(q);

}

六.运行结果

C语言实现移位密码

这是密码学中最简单的一种加密方法,但我们可以使其变得更复杂一些,比如自定义字母顺序表,密匙加强等。同时可以作为我们接触密码学的一个切入点,后面更多复杂的知识点会慢慢接触。文章来源地址https://www.toymoban.com/news/detail-501602.html

到了这里,关于C语言实现移位密码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 密码学概念科普(加密算法、数字签名、散列函数、HMAC)

    密码散列函数 (Cryptographic hash function),是一个单向函数,输入消息,输出摘要。主要特点是: 只能根据消息计算摘要,很难根据摘要反推消息 改变消息,摘要一定会跟着改变 对于不同的消息,计算出的摘要几乎不可能相同 根据散列函数的上述特点,可以应用在保存密码、数

    2024年02月10日
    浏览(32)
  • 密码学:一文读懂非对称加密算法 DH、RSA

    密码学:一文读懂非对称加密算法 DH、RSA

    我们可能没有在瑞士苏黎世银行存入巨额资产的机会,但相信大多数人都在电影中见到这样一组镜头: 户主带着自己的钥匙来到银行,要求取出自己寄放的物品。银行工作人员验明户主身份后,拿出另一把钥匙同户主一起打开保险柜,将用户寄放物品取出。我们可以把这个保

    2024年01月21日
    浏览(15)
  • 现代密码学第二次实验:分组加密算法DES及其工作模式

    现代密码学第二次实验:分组加密算法DES及其工作模式

    为了帮助同学们完成痛苦的实验课程设计,本作者将其作出的实验结果及代码贴至CSDN中,供同学们学习参考。如有不足或描述不完善之处,敬请各位指出,欢迎各位的斧正! 1、掌握DES算法的工作原理。 2、熟悉分组加密算法的4种工作模式(OFB模式可不做)。 3、了解DES的雪

    2024年02月06日
    浏览(34)
  • 【密码学】块加密(分组加密)的工作模式

    【密码学】块加密(分组加密)的工作模式

    上一篇文章讨论了 DES 算法,现在我们有了“给定 64-bit 的明文、64-bit 的密钥,输出 64-bit 的密文”的加密手段。这离实际应用还有一点点距离,因为要传递的信息当然不止 64 位。 要用 DES 加密一条信息,一般先把信息填充到 64 的倍数,于是就可以分成许多组,每组 8 个字节

    2024年02月16日
    浏览(13)
  • 密码学——128位AES算法(C/C++实现)
  • 密码学—Vigenere加密Python程序

    密码学—Vigenere加密Python程序

    古典密码,属于多表加密。 怎么就是多表了? 维吉尼亚密码的加密算法实质是凯撒密码,因为他是先分好小组,然后用密钥串对应着分好组的每一个字母进行加密(因为一个凯撒表用密钥串的一个字母加密),当然是遵循下标相同的,比如秘钥为:abc,明文为qwer,然后明文

    2024年02月11日
    浏览(16)
  • 【网络安全】【密码学】【北京航空航天大学】实验四、古典密码(上)【C语言实现】

    【网络安全】【密码学】【北京航空航天大学】实验四、古典密码(上)【C语言实现】

    1、 通过本次实验,了解古典加密算法的 主要思想 ,掌握 常见的 古典密码。 2、 学会 应用 古典密码,掌握针对部分古典密码的 破译方法 。 古典密码的编码方法主要有两种: 置换 和 代替 。 置换密码 重新排列明文中字符的顺序,不改变字符本身; 代替密码 不改变明文中

    2024年01月21日
    浏览(43)
  • 【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

    【网络安全】【密码学】【北京航空航天大学】实验五、古典密码(中)【C语言实现】

    实验目的 和 原理简介 参见博客:古典密码(上) 1、弗纳姆密码(Vernam Cipher) (1)、算法原理 加密 原理: 加密过程可以用方程 ci = pi (+) ki 表示,其中 pi 是明文第 i 个二进制位, ki 是密钥第 i 个二进制位, ci 是密文第 i 个二进制位, (+) 是 异或 运算符。密文是通过对明

    2024年01月21日
    浏览(47)
  • 密码学——古典密码中的基本加密运算附简单例题

    本篇文章将对古典密码中使用到的基本加解密运算进行总结,并展示个别加减密运算的简单例题,从而使读者更加容易理解古典密码中的基本加减密运算的原理。 首先引入密码学中的几个基本定义: M:明文空间,明文的集合 C:密文空间,密文的集合 K:密钥空间(也称密钥

    2024年02月12日
    浏览(29)
  • 密码学【java】初探究加密方式之非对称加密

    密码学【java】初探究加密方式之非对称加密

    非对称加密算法又称现代加密算法。非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey) 公开密钥和私有密钥是一对。如果用公开密钥对数据进行加密,只有用对应的

    2024年02月03日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包