C语言编程: 文件移位加密与解密。

C语言编程: 文件移位加密与解密。,第1张

直接对字符串按字符加减密钥的位数就可以了。

#include

<iostream.h>

#define

MAX

1000

//加密

char

*

Encryption(char

*E,int

Key)

{

for(int

i=0*(E+i)i++)

{

*(E+i)

+=

Key

if(*(E+i)>'z')

*(E+i)

-=

('z'-'a')+1

}

return

E

}

//解密

char

*

Decryption(char

*E,int

Key)

{

for(int

i=0*(E+i)i++)

{

*(E+i)

-=

Key

if(*(E+i)<'a')

*(E+i)

+=

('z'-'a')+1

}

return

E

}

void

main()

{

char

a[MAX]

int

key

cout<<"输入字符串:"<<endl

cin

>>

a

cout<<"输入密钥:"<<endl

cin

>>key

cout<<"加密输出:"<<Encryption(a,key)<<endl

cout<<"解密输出:"<<Decryption(a,key)<<endl

}

import java.util.Scanner

public class Cipher

{

public static void main(String [] args)

{

Scanner kb=new Scanner(System.in)

System.out.println("Please enter a String: ")

String str=kb.nextLine()

System.out.println("Please enter the offset value: ")

int offset=kb.nextInt()

Cipher c = new Cipher() //new个类Cipher的实例

System.out.println(c.encrypt(str, offset)) //执行encrypt()方法,并输出

}

public String encrypt(String str,int offset)

{

String result = str //这里你要再定义一个返回结果的字符串.String.replace()方法只是返回改过后的字符串,并不修改原字符串。

for(int i=0i<str.length()i++)

{

int a=(int)str.charAt(i)+offset

if(a>126)

{

result = str.replace(str.charAt(i),(char)(a-95))

}

else

result = str.replace(str.charAt(i),(char)(a))

}

//return str //永远都是返回原来的字符串

return result

}

}

至于你说的!和?的问题,你应该是直接输出a了,看到的是?,因为a是128,超过了127,所以输出的是?,超过127的都是?,不信你可以试试129等等。但替换字符的时候你用的是a-95,是正确的,用!替换}。

这道题,并不难,只是楼主,没有说清,是就字母移位吗?

但是看你的例子,有不全是。

程序如下:

#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

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12104513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存