C语言(文件的移位与加密解密)

作者&投稿:徐阳 (若有异议请与网页底部的电邮联系)
c语言 文件移位加密与解密~

您说的这个方法,我没有操作过。 给文件加密,我使用的是超级加密3000. 超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全! 具体操作方法: 1 下载安装超级加密3000。

我自己用C#做了一下这功能,注释都写上了,希望能帮上你忙 ~ ~using System;
using System.Collections.Generic;
using System.Text;namespace myHomeworkTest30
{
class Program
{
static void Main(string[] args)
{
Emp emp = new Emp();//定义一个对象.自动调用其构造方法,接收字符串并转化为字符数组
int len=emp.show();//调用实现加密字符串的方法,并返回字符数组的长度

for (int i = 0; i < len-1; i++)
{
Console.Write(emp[i]);//通过索引器进行输出
}
Console.ReadLine();

}
}
public class Emp
{
public string str = "";//接收字符串
public char[] arr;//字符数组来用存放把字符串转后成字符
public char first;//加密后的字符串中的第一个字符
public Emp()
{
Console.WriteLine("请输入一个要加密的字符串:");
str = Console.ReadLine();//接收
arr=str.ToCharArray();//字符串.ToCharArray()把字符串转化为字符数组
}
public int show()//实现加密的方法
{
first=arr[arr.Length - 1];//把原字符数组中的最后一个字符拿出来作为加密后的第一个字符
Console.WriteLine("加密后的字符串为:");
Console.Write(first);//输出加密后的第一个字符

for (int i = 0; i < arr.Length; i++)
{
arr[i] = (char)(arr[i] + 3);//对于其它的字符进行加密,+3

}
return arr.Length;//返回字符数组的长度
}
//定义一个索引器
public char this[int index]
{
get
{
return arr[index];
}
set
{
arr[index] = value;
}
}
}
}

这道题,并不难,只是楼主,没有说清,是就字母移位吗?
但是看你的例子,有不全是。
程序如下:
#include <stdio.h>
#include <stdlib.h>

FILE *source;//源文件
FILE *destination;//目标文件
int key;//密钥
char file[100];//文件名
void encryption()//加密
{
char ch;
printf("请输入要加密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch+=key;
fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

void decrypt()//解密
{
char ch;
printf("请输入要解密的文件名\n");
scanf("%s",file);
if((source=fopen(file,"r"))==NULL)
{
printf("无法打开文件!\n");
exit(0);
}
printf("请输入加密后的文件名\n");
scanf("%s",file);
if((destination=fopen(file,"w"))==NULL)
{
printf("无法创建文件!\n");
exit(0);
}
printf("请输入密钥\n");
scanf("%d",&key);
ch=fgetc(source);
while(ch!=EOF)
{
if(ch=='\n')
{
fputc(ch,destination);
ch=fgetc(source);
continue;
}
ch-=key;

fputc(ch,destination);
ch=fgetc(source);
}
fclose(source);
fclose(destination);
}

int main()//主函数提供菜单
{
int choice=0;
printf("******************\n");
printf("1 文件加密\n");
printf("2 文件解密\n");
printf("3 退出\n");
printf("******************\n");
printf("请输入1 2 3选择操作\n");
scanf("%d",&choice);

switch(choice)
{
case 1:encryption();break;
case 2:decrypt();break;
case 3:break;
}
return 0;
}

#include<stdio.h>
void code(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-97+key)%26;
p++;
}
}
void uncode(char *p,int key)
{
while(*p!='\0')
{
*p=97+(*p-71-key)%26;
p++;
}
}
main()
{
char str[100];
int n,key;
printf("输入密匙:");
scanf("%d",&key);
printf("输入1加密,输入2解密:");
scanf("%d",&n);
printf("输入字符串:");
scanf("%s",str);
if(n==1)
{
code(str,key);
printf("密文为%s\n",str);
}
else if(n==2)
{
uncode(str,key);
printf("原文为%s\n",str);
}
}

//---------------------------------------------------------------------------

#include <stdio.h>

void encryption(const char *fname) /*对文件路径为fname的文件进行加密*/
{
int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL) {
fprintf(stderr,"FILE NOT FOUND!\n");
return ;
}
printf("path of the encrypted file:");
gets(efname); /*输入加密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行加密,并写入密文文件*/
{
fputc(ch+offset,fp1);
}
fclose(fp1);
fclose(fp);
puts("Success!");
}

void decryption(const char *fname) /*对文件路径为fname的文件进行解密*/
{
int offset;
char efname[256],ch;
FILE *fp,*fp1;
if ((fp=fopen(fname,"r"))==NULL) {
fprintf(stderr,"FILE NOT FOUND!\n");
return ;
}
printf("path of the declassified document :");
gets(efname); /*输入解密后的文件的保存路径*/
printf("offset:");
scanf("%d",&offset); /*输入位移量(密钥)*/
fp1=fopen(efname,"w");

while ((ch=fgetc(fp))!=EOF) /*进行解密,并写入明文文件*/
{
fputc(ch-offset,fp1);
}
fclose(fp1);
fclose(fp);
puts("Success!");
}
int main(void)
{

char fpname[256];

puts("A.Encryption");
puts("B.Decryption");
printf("Input A or B(other to EXIT) :"); /*输入a为加密,输入b为解密,输入其它字符则退出程序*/
switch(getchar())
{
case 'a':
case 'A':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要加密的明文文件路径*/
encryption(fpname); /*调用加密函数对文件进行加密*/
break;
case 'b':
case 'B':
printf("FILE:");
fflush(stdin);
gets(fpname); /*输入要解密的密文文件路径*/
decryption(fpname); /*调用解密函数对文件进行解密*/
break;
default:break;

}
return 0;
}
//---------------------------------------------------------------------------

全部缩进到首行了,ALT+F8可以自动对齐~~用最简单的C写的,一目了然!设文件为1.txt
#include<stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAXLONGTH 5000 //如果文件内容较长,请修改MAXLONGTH

void show()//显示源文件内容
{
FILE *fp;
char ch;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("打开文件失败!\n");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
putchar(ch);
ch=fgetc(fp);
}
fclose(fp);
}

void jiami(int num) //密码算法,入口参数:密钥
{
FILE *fp;
char ch;
char strbuffer[MAXLONGTH];
int bufsize = 0;
if((fp=fopen("1.txt","r"))==NULL)
{
printf("打开文件失败!\n");
getch();
exit(1);
}
ch=fgetc(fp);
while (ch!=EOF)
{
ch = ch+num;
putchar(ch);
strbuffer[bufsize]=ch;
bufsize++;
ch=fgetc(fp);
}
strbuffer[bufsize]='\0';
printf("\n\n");
fclose(fp);
if((fp=fopen("1.txt","w+"))==NULL) //重写文件
{
printf("写入文件失败,任意键退出!");
getch();
exit(1);
}
fputs(strbuffer,fp);
fclose(fp);
}
void main()
{
int num = 0;
int chooce = 0;
printf("源文件内容如下:\n");
show();
printf("\n\n请输入密匙:");
scanf("%d",&num);
printf("*****************\n");
printf("** 1.加密 **\n");
printf("** 2.解密 **\n");
printf("*****************\n");
printf("请选择文件处理方式:");
scanf("%d",&chooce);
while(chooce)
switch(chooce) {
case 1: //加密算法
printf("\n加密结果------->");
jiami(num);
chooce = 0;
break;
case 2: //解密算法
num = -num;
printf("\n解密结果------->");
jiami(num);
chooce = 0;
break;
default:
printf("\n无效请求,请重新选择文件处理方式:");
scanf("%d",&chooce);
}
}

/*
程序功能:通过移位的方法加密/解密文件
程序说明:本程序的源文件生成可执行文件后(.exe结尾),保存在一个目录中。
要加密/解密的文件必须已经存在这个目录中,否则会提示无法打开文件。
接着按程序提示即可完成指定操作。
程序流程:选择操作类型->打开输入文件(要加密/解密的文件的文件名称)->输入密钥
->打开输出文件(保存加密/解密后的文件的文件名称)->加密/解密
*/
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE * infile=NULL; //输入文件指针
FILE * outfile=NULL; //输出文件指针
int key; //密钥
int operation=0; //操作类型,加密---1,解密---2
char filename[100],tempfile[1000],data;

while(1)
{
infile=outfile=NULL;
operation=0;
//选择操作类型
while(!(operation==1||operation==2))
{
printf("请选择【加密---1 解密---2】:");
scanf("%d",&operation);
//处理非法输入
if(!(operation==1||operation==2))
printf("选择有误,请重新选择!\n");
}
//打开输入文件
while(infile==NULL)
{
printf("\n输入要打开的文件文件名称:");
scanf("%s",filename);
//以只读方式打开文件流
infile=fopen (filename,"r");
//打开文件流失败,重新输入文件名
if(infile==NULL)
printf("\n无法打开文件,请检查文件是否存在后重新输入!");
}
//输入密钥
printf("\n输入密钥:");
scanf("%d",&key);

if(operation==1)
printf("\n输入保存加密后文件的名称:");
else
printf("\n输入保存解密后文件的名称:");
scanf("%s",filename);
//以读写方式打开输出文件
outfile=fopen (filename,"w+");

while((data=fgetc(infile))!=EOF)//逐个字符读出输入文件的内容
{
if(operation==1) //加密
fputc(data+key,outfile);
else //解密
fputc(data-key,outfile);
}

//输出加密/解密的过程
if(operation==1)
printf("\n加密过程:");
else
printf("\n解密过程:");
rewind(infile); //文件指针回到文件开始处
while((data=fgetc(infile))!=EOF)
printf("%c",data);

printf(" --> ");

rewind(outfile);
while((data=fgetc(outfile))!=EOF)
printf("%c",data);

printf("\n\n");
fclose(infile); //关闭文件流
fclose(outfile);
}

return 0;
}


换位、移位和其他:语句的灵活调整 (笔记)
转换、移位的限制条件 1.从语法层看转换和移位一一句子成分的转换词语的移位一一语序调整的规则与原理 2.从修辞层灾看转换和移位 句子和上下文的关系 清断一一强调一一连贯-3.话语的其他调整句式——语词增减一一标点、用语的变化——语言艺术:更广阔的空间 1 词语重新组合的两个限制条件:第二个...

C语言中的取反与移位运算符的问题
C++中的位运算符,只能用于int和unsigned int类型的,宽度小于int的会被隐式转化成int。左移当然没问题,因为截断的时候用不到高位,右移的时候,高位的1被截到b中,造成无论移位和取反的顺序,结果都是一样的。include <stdio.h> include <stdlib.h> int main(){ unsigned char a=0x11;unsigne...

求助,什么是语言的移位性
先要了解一下C语言里所有的位运算都是指二进制数的位运算。即使输入的是十进制的数,在内存中也是存储为二进制形式

C语言中的左移和右移?
0111右移一位是把最后一位的1去掉,左边补个0,得0011,转换为十进制是3,这是正确的。并不等同于除以2

汇编语言中的移位指令具体的操作是什么?
\\x0d\\x0aRCL:带进位循环左移,最高位进到CF的,同时CF值补到最低位;\\x0d\\x0aRCR:带进位循环右移,最低位进到CF的,同时CF值补到最高位;\\x0d\\x0aSHLD:双精度左移,第二个操作数移位到第一个操作数,第一操作数进到CF,和逻辑左移类似,低位移到高位;\\x0d\\x0aSHRD:双精度...

c语言中位运算的左位移右位移都是什么意思
如果是左移,则规定补入的数全部是0;如果是右移,还与被移位的数据是否带符号有关。若是不带符号数,则补入的数全部为0;若是带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)。具体移位规则如下所示。位移位运算符的优先级如下:·算术运算符 优先于 位移位运算符 优先于...

什么是英语语言的移位性displacement和自反性reflexivity?
移位修饰法,这是英语语言学分支修辞学的一种重要的修辞手法。它将描写甲事物性状的词语移来描写乙事物的性状。移位修饰法就是将仅可用于修饰某种东西的词汇移植修饰到另类东西上的一种语言使用手法,即将甲事物的修饰成分转移到乙事物上,使风马牛不相及的成分凑在一起,反而使得语言简练凝缩,形象生动...

c语言文件读数据和指针移位那个快
数组快的,不是指针,因为指针你还有从内存中读取指针变量的值,然后进行间接取值,数组的名是在符号表中的,直接可以使用,没有访问变量。

如何用c语言编写这个程序--数据移位程序
if ((fp= fopen("filename.bin", "r")) == NULL)\/\/读文件 { return 1;} if ((fp1= fopen("filename.bin", "w")) == NULL)\/\/写文件 { fclose(fp);return 1;} while(1){ if(!fread(&temp,sizeof(short),1,fp)){\/\/循环读文件的内容到temp break;} \/\/用移位操作,进行...

C语言中位移位运算符?
c语言位运算符包括 位逻辑运算符 和 移位运算符。位逻辑运算符:&按位与,|按位或,^按位异或,~取反 移位运算符:<<左移,>>右移 --- &按位与运算符:二进制中运算,0&0=0,0&1=0,1&0=0,1&1=1,相当于布尔型的与运算 |按位或运算符:二进制中运算,0|0=0,0|1=1,1|0=1,...

新密市13184401824: 文件移位加密与解密(C语言编程) -
貂宗爱全: 这样就可以了 #include<stdio.h> void code(char *p,int key) { while(*p!='\0') { *p=97+(*p-97+key)%26; p++; } } void uncode(char *p,int key) { while(*p!='\0') { *p=97+(*p-71-key)%26; p++; } } main() { char str[100]; int n,key; printf("输入密匙:"); ...

新密市13184401824: 跪求c语言编程问题 文件移位加密与解密 急! -
貂宗爱全: #include<stdio.h>#include<stdlib.h> /*加密算法*/ /*说明:加密算法是读取一个保存有明文信息的文件,然后将明文进行加密并存入生成加密的文件*/ void jiam(){ int key; char ch; FILE *fp,*fp1; printf("请输入密钥:"); scanf("%d",&key); fp=...

新密市13184401824: C语言编写对文件加密及解密? -
貂宗爱全: 常用简单的加密就是把字符移位,读取一个字符,将它+100,然后存为新文件中,解密时就读取-100,然后就是原文件了.还有就是读个字符和一个值异或,解密时还用这个加密的异或一遍,比较...

新密市13184401824: 用C语言编写文件移位加密与解密程序,如加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后
貂宗爱全: 您说的这个方法,我没有操作过. 给文件加密,我使用的是超级加密3000. 超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全! 具体操作方法: 1 下载安装超级加密3000. 2 然后在需要加密的文件上单击鼠标右键选择加密. 3 在弹出的文件加密窗口中设置文件加密密码就OK了.

新密市13184401824: 求一个C语言实现的移位加密代码 -
貂宗爱全: char getkey(char txt) { char e = "dfwkekgodsfdfwkdsf";//一定位数的字符串,比如32位 int ctr=0; char tmp = ''; for (int i=0;i

新密市13184401824: 如何加密和解密文件(c语言),,举几个简单的例子即可...... -
貂宗爱全: 读取文件 ch=fgetc(fp); while(ch!=EOF) { ch++; //移位加密,解密就是减一 ch=fgetc(fp); }

新密市13184401824: 用位移运算实现数据加密 C语言编程谁会呀 -
貂宗爱全: 我这个是用左移5位的方法加密、解密的.你看看吧.#include <stdio.h>#include <string.h>void encrypt(unsigned char *a){ unsigned char value = *a; unsigned short m; m = ((unsigned short) value)<<5; *a = (unsigned char) (m&0xFF); *a |= (...

新密市13184401824: C语言文件加密解密
貂宗爱全: 加密: #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> void dofile(char *in_fname,char *pwd,char *out_fname);/*对文件进行加密的具体函数*/ void main(int argc,char *argv[])/*定义main()函数的命令行参数*/ { char in...

新密市13184401824: C语言 文件加密解密 -
貂宗爱全: 加密:#include#include#include#include void dofile(char *in_fname,char *pwd,char *out_fname);/*对文件进行加密的具体函数*/ void main(int argc,char *argv[])/*定义main()函数的命令行参数*/ { char in_fname[30];/*用户输入的要加密的文件...

新密市13184401824: C语言编程题目,各位大神帮帮我吧. -
貂宗爱全: /* 备注:将某一已知文件的内容(仅限于英文字母)以字符形式读出,根据密钥(用户从键盘输入)将对应字符进行移位操作即可,解密时移动相反. 例如:加密:设原文为abcdef,密钥为5,则有abcdef每个字母按字母表向后移动5们 (注:z...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网