C语言实现移位密码

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: C语言实现移位密码

一.移位密码

  移位密码(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);
}

五.运行结果

d79a194539bba74820da58086e04d93b.jpg


六.补充

这是密码学中最简单的一种加密方法,但我们可以使其变得更复杂一些,比如自定义字母顺序表,密匙加强等。后续还有其他加密方法,加紧创作中


相关文章
|
5月前
|
存储 C语言
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
【C语言】位与移位操作符详解
|
5月前
|
存储 算法 编译器
【c 语言 】移位操作符详解
【c 语言 】移位操作符详解
212 0
|
存储 C语言
C语言操作符[算数操作符,赋值操作符,单目操作符,移位操作符]
C语言操作符[算数操作符,赋值操作符,单目操作符,移位操作符]
|
4月前
|
编译器 C语言
【C语言】:中移位操作符,位操作符详运算规则详解
【C语言】:中移位操作符,位操作符详运算规则详解
34 1
|
4月前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
40 3
|
4月前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
32 1
|
4月前
|
算法 C语言
【C语言】:巧用移位操作符,位操作符解决问题
【C语言】:巧用移位操作符,位操作符解决问题
29 0
|
5月前
|
安全 BI 数据安全/隐私保护
每天一道C语言编程:合格密码的判定
每天一道C语言编程:合格密码的判定
41 0
|
5月前
|
C语言
【C语言】位操作符与移位操作符练习
【C语言】位操作符与移位操作符练习
【C语言】位操作符与移位操作符练习
|
机器学习/深度学习 Java 数据安全/隐私保护
密码检查-C语言/Java
密码检查-C语言/Java
90 0