首页 > 其他分享 >凯撒密码1

凯撒密码1

时间:2024-05-14 09:40:52浏览次数:30  
标签:text 偏移量 密码 result letter printf 凯撒

一、常规凯撒

1.原理:

它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文

例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。

 2.代码实现凯撒

#include <stdio.h>
#include <stdlib.h>
int main (){
char small_letter[26]={'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'};
char big_letter[26]={'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'};
char text[1000],result[1000];
int c,count=0,k,p;
char function;
printf("Insert Text:");
c=getchar();
while(1) //读取字符串
{
if(c == '\n') break;
text[count]=c;
printf("%c",text[count]);
count++;
c=getchar();
}

printf("\n");
printf("Encrypt or Decrypt? E or D :");
scanf("%c",&function);
if (function == 'E'){

printf("Insert Key :" );
scanf("%d",&k);
for(int i=0;i<count;i++){
if(text[i]>='A'&&text[i]<='Z')
{
result[i]=big_letter[((text[i]-'A')+k)%26];
}
//找出加密后字符在字符数组里的对应位置
else if (text[i]>='a'&&text[i]<='z')
{
result[i]=small_letter[((text[i]-'a')+k)%26];
}
else result[i]=text[i];
printf("%c",result[i]);
}
}

else {
printf("Insert Key :" );
scanf("%d",&k);
for(int i=0;i<count;i++){
if(text[i]>='A'&&text[i]<='Z')
{
p=((text[i]-'A')-k);
while(p<0)p+=26;
result[i]=big_letter[p];
}
//找出解密后字符在字符数组里的对应位置
//这里要注意不要让它超出范围(下表位置为负数)
else if (text[i]>='a'&&text[i]<='z')
{
p=((text[i]-'a')-k);
while(p<0)p+=26;
result[i]=small_letter[p];
}
else result[i]=text[i];
printf("%c",result[i]);
}
printf("\n");
}
return 0;
}

二、变异凯撒

1.原理:常规凯撒是每个字母的偏移量是一样的,变异凯撒是第一个字母偏移量是m,第二个偏移量是m+1(或m+n),之后的依次在前一个的偏移量上+1(或+n)

2.例题

寒鹭变异凯撒:题是mrfk~Gbsx]@]`mZjt,之前正好解了一道与这个相似的,直接用凯撒密码解不出来,是变异的。所以mrfk正好对应flag,m对f偏移量为-7,r对l为-6,f对a为-5,k对g为-4,所以每次加一,用ASCII表对照来解

 

标签:text,偏移量,密码,result,letter,printf,凯撒
From: https://www.cnblogs.com/Lyjia-n/p/18178600

相关文章

  • 【VMware vSphere】如何查看 OVF/OVA 模板部署虚拟机所配置的密码。
    当我们从OVF/OVA模板部署虚拟机时,在部署期间可能会要求你对虚拟机进行一些配置,比如IP地址、虚拟机密码等。关于这些配置参数,登录vSphereClient,可以转到该虚拟机-配置-设置-vApp选项-属性中进行参看。当我们部署完这个虚拟机后,如果长时间没有登录,忘记配置期间设置的密码,那该怎......
  • Redis配置登录密码并使用认证密码登录
    Redis配置登录密码并使用认证密码登录1.修改配置文件Redis的配置文件redis.conf,找到如下行:#requirepassfoobared去掉注释,并修改为所需要的密码:requirepass123456(其中123456就是要设置的密码)2.重启Redis如果Redis已经配置为service服务,可以通过以下方式重启:serviceredis......
  • 在Linux中,如何实现安全的密码策略?
    在Linux中实现安全的密码策略涉及到多个方面,主要包括设置密码复杂度规则、密码过期策略、密码历史限制以及尝试失败后的账户锁定等。以下是实现这些策略的详细步骤和方法:1.修改/etc/login.defs配置文件/etc/login.defs文件是控制用户密码和其他账户属性的主要配置文件。你可以......
  • 启动软件输入密码
    #硬编码的正确密码的哈希值(这只是一个示例,你应该使用更安全的方法来存储和验证密码)$correctPasswordHash="cc0c306017c7d88cb92009d56e2e31c1d2e2a97d989dc5c27cb8f65d69e8aad7"#替换为实际密码的哈希值#读取用户输入的密码$userPassword=Read-Host"pleaseinputI......
  • Git -- 修改git账号密码后,进行git提交时报错
    修改git账号密码后,进行git提交时报错$gitpushorigindevelopremote:HTTPBasic:Accessdeniedfatal:Authenticationfailedfor'http://xxx/web.git/'重新设置下git信息gitconfig--globaluser.name"yourname"gitconfig--globaluser.email"your......
  • 如何安全的使用密码登录账号(在不知道密码的情况下)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z1、打开工具,进入账号密码模块(快捷键:Ctrl+2),如图2、看到鼠标移动到密码那一栏有提示,按住Ctrl或者Alt点击或者双击就能复制内容,这方法虽然快,但还是能看到密码。3、先模拟一个账号,随意填写数据。保存它。之后左侧......
  • 【转】[MySQL] 忘记密码的处理之 Windows 篇
    来自:阿里的通义灵码在Windows环境下,如果你忘记了MySQL的root密码,可以通过以下步骤重置:停止MySQL服务:打开“服务”管理工具(可以通过运行 services.msc 或搜索“服务”找到)。找到名为 MySQL 或 MySQL80(根据你的版本)的服务,然后右键选择“停止”。找到MySQ......
  • 【转】[MySQL] 忘记密码的处理之 Linux 篇
    来自:阿里的通义灵码如果你忘记了MySQL的root用户密码,可以按照以下步骤重置:方法1:使用 mysqld_safe 跳过授权表停止MySQL服务:bash sudoservicemysqlstop启动MySQL并跳过授权表:bash sudomysqld_safe--skip-grant-tables&登录到MyS......
  • 修改密码
    整体思路:在dao层写接口约束,在实现类中写乡音给的代码,传入的参数是用户的id,通过用户的id修改此用户的密码,返回参数类型为int,即有几条受影响的条数;在service层中写service的接口约束,在实现类中调用dao层,这里的调用通常都是利用实例化service实现类时通过构造方法实例化dao,这里方......
  • 中国移动光猫Fiberhome HG6145F获取超级管理员密码和解决第四号口不能用的问题
    第一步获取光猫MAC地址你看光猫背后就行了,如果没有,就用命令:arp-a192.168.1.1第二步开启telnet访问地址:http://192.168.1.1/cgi-bin/telnetenable.cgi?telnetenable=1&key=你的Mac地址,要求全大写如果成功,网页会显示:telnet开启第三步进入telnet地址还是在电脑用cmd输入:t......