用C语言编程恺撒密码加密解密程序

恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):明文字母表... 恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
用到C语言函数
fopen(“D:\\test\\a1”,”r”) 以只读的方式打开名为a1的文件,a1文件位于D:\test\下。
fopen(“D:\\test\\a1”,”w”) 以写的方式打开名为a1的文件,a1文件位于D:\test\下。
fgets(str,n,fp) 从fp指向的文件读入一个长度为n的字符串,存放到字符数组str中
fputs(str,fp):把str所指向的字符串写到文件指针变量fp所指向的文件中
展开
 我来答
sunnyhouyq
2014-03-06 · TA获得超过648个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:516万
展开全部
#include <stdio.h>

#define isletter( c )    ( ((c)>='a'&&(c)<='z') || ((c)>='A'&&(c)<='Z') )

void Enc( const char *str, char *out, int key )
{
    int i = 0; 
    while( str[i] )
    {
        if ( isletter( str[i] ) )
        {
            out[i] = str[i] + key;
            if ( ! isletter( out[i])  )
                out[i] -= 26;
        }
        else
            out[i] = str[i];
        i++;
    }
    out[i] = 0;
}
void Denc( const char *str, char *out, int key )
{
    int i=0;
    while( str[i] )
    {
        if ( isletter( str[i] ) )
        {
            out[i] = str[i] - key;
            if ( ! isletter( out[i] ) )
                out[i] += 26;
        }
        else
            out[i] = str[i];
        i++;
    }
    out[i] = 0;
}

int main()
{
    char  out[100], out2[100];
    Enc( "THE QUICK BROWn fox jumps over THE LAZY DOG", out, 3 );
    printf( "%s\n", out );
    Denc( out, out2, 3 );
    printf( "%s\n", out2 );
}
追问
不好意思,运行界面怎么不是跟图的一样?
追答
Rankabc
2014-03-06 · TA获得超过3559个赞
知道大有可为答主
回答量:3705
采纳率:59%
帮助的人:1041万
展开全部
这个我之前写过

未加密文字:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。(屠夫、面包师和蜡烛匠)。
关键密钥:BIG BIGBIGB IGB IGBIG BIG BIG BIGBIGBIGBI GBIGB
加密文字:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

#include<stdio.h>
#include<string.h>
void main()
{
char str[99],k[10],m[99]="";
unsigned i,j=0,n;
printf("输入要加密的内容\n");
gets(str);
printf("输入密匙\n");
gets(k);
n=strlen(k);
for(i=0;i<strlen(str);i++)
{
if(str[i]==' ')m[i]=' ';
else
{
m[i]=str[i]+k[j]-'A';
if(m[i]>'Z')m[i]=m[i]-26;
j++;
}
if(j==n)j=0;
}
printf("加密后\n");
puts(m);
}
追问
不好意思,运行界面怎么不是跟图的一样?
追答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式