查看: 2651|回复: 17

[其他求助] 关于凯撒密码

简洁模式
发表于 2016-7-19 20:47:26
本帖最后由 没有风格的风 于 2016-7-20 17:12 编辑
表示一直不太懂凯撒密码的位移(偏移量)是怎么回事
本主题帖为【历史主题】,仅楼主发布内容可以浏览。
发表于 2016-7-19 20:55:32 | 来自小霸王手机
百度一下 你就知道   实则替换密码
7
发表于 2016-7-19 21:35:40
英文字母表翻出来看
发表于 2016-7-19 22:37:08 | 来自小霸王手机
1-A 2-B.........26-Z
发表于 2016-7-20 08:07:09
明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推X将变成A,Y变成B,Z变成C。
登录帐号可查看完整回帖内容
发表于 2016-7-20 09:02:16 发帖际遇
所以为什么要提到"位移"这个词呢
发表于 2016-7-20 15:38:19 发帖际遇
楼主要是说的password的第一题的话 你应该需要注意那个最后的-1 也就是把前面的数字全都-1 列如4变成3 接着将其变成英文就行了 自已动手把 答案不能说的- -  祝你好运哦
登录帐号可查看完整回帖内容
发表于 2017-6-10 06:31:36 | 发自安卓客户端
就是把26个英文字母按照一定的数向后向前移位,假如偏移2 那1+2=3
A-1  B-2  C-3…需要破译的是A的话,你那就是1对应的3就是C这个位移数没有给的话,好像是要自己从1开始试到25
发表于 2017-6-10 07:43:02 | 发自安卓客户端
我好像记得偏移量是3吧
发表于 2017-7-9 22:01:59 | 2017-7-23 21:16编辑 | 发自安卓客户端
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include<stdlib.h>
void dec(char *s,int m);
void enc(char *s,int m);
int menu()
{
int p;
printf("\t\t 文本加解密程序\n");
printf("\t\t\t0:退出\n");
printf("\t\t\t1:加密\n");
printf("\t\t\t2:解密\n");
scanf("%d",&p);
return p;
}
int main(){
int ch,m;
char s[100];
while(1)
{
system("cls");
ch=menu();
if(ch==0)
break;
printf("请输入偏移量:\n");
scanf("%d",&m);
fflush(stdin);
printf("请输入文字段落:\n");
fflush(stdin);
gets(s);
switch(ch)
{
case 1:enc(s,m);
break;
case 2:dec(s,m);
break;}
printf("处理后的文字段落:\n");
puts(s);
fflush(stdin);
getch();
}
}
void dec(char *s,int m)
{
int i,n;
n=m%26;
for(i=0;i<strlen(s);i++)
{
if(*(s+i)>=’a’&&*(s+i)<=’z’-n)
*(s+i)+=n;
else if (*(s+i)>=’Z’-n&&*(s+i)<=’Z’)
*(s+i)=*(s+i)-’Z’+’A’+(n-1);
}
}
void enc(char *s,int m)
{
int i,n;
n=m%26;
for(i=0;i<=strlen(s);i++)
{
if(*(s+i)>=’a’+n&&*(s+i)<=’z’)
*(s+i)-=n;
else if (*(s+i)>=’A’&&*(s+i)<=’A’+n)
*(s+i)=*(s+i)+’Z’-’A’-(n-1);
}
}
计算机汇编语言中的偏移量定义为:把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址或偏移量”。
登录帐号可查看完整回帖内容
返回版块
12
尚未登录
您需要登录后才可以回帖 登录 | 加入学院