文件加解密,可另存文件

/**********************************************************
  本人花了一下下午写的一个程序!文件加密程序可以自动转换
  输入的文本文件加密或者解密!可以选择保存到文件!
 
  <Edison wong>. QQ139767
**********************************************************/
#include <stdio.h>
#define N 10000
#define JIEMI -4-50+100
#define MI +4+50-100

void Nonetech(int len,char ch[]);
void tech(int len,char ch[]);
void Nonefun();
void fun();
void read();
void maindan();

void read()
{
 FILE *fp;
 char choose;
 char zu;
 char name[10];
 printf("**********************************************************/n");
 printf("请输入需要打开的文件:");
 gets(name);
 fp=fopen(name,"r");
 printf("转换后的明文是:");
 while(!feof(fp))
 {
  zu=fgetc(fp)JIEMI;
  if(zu!='-'&&zu!='#')
   putchar(zu);
 }
 putchar('/n');
 printf("**********************************************************/n");
 fclose(fp);
 printf("回主菜单?(Y)/n");
 scanf("%c",&choose);
 getchar();
 if(choose=='y'||choose=='Y')
  maindan();
}


void maindan()
{
 int a;
 printf("请选择:/n");
 printf("1,需要转换标点符号为密文!/n");
 printf("2,不需要转换标点符号,标点为明文!/n");
 printf("3,密文转换为明文!/n");
 printf("4,退出?(Y)/n");
 scanf("%d",&a);
 getchar();
 switch(a)
 {
 case 1:fun();break;
 case 2:Nonefun();break;
 case 3:read();break;
 case 'Y':break;
 case 'y':break;
 }
}
void Nonetech(int len,char ch[])
{
 int a;
 for(a=0;a<len;a++)
 {
  if(ch[a]==','||ch[a]=='.'||ch[a]=='!'||ch[a]=='/"'||ch[a]==' ')
   a++;
  ch[a]=ch[a]MI;
 }
}
void tech(int len,char ch[])
{
 int a;
 for(a=0;a<len;a++)
  ch[a]=ch[a]MI;
}
void Nonefun()
{
 char ch[N];char choose='y',tempa;char *p;
 while(choose=='y'||choose=='Y')
 {
  int len=0,a;FILE *fp;char name[10];
  printf("**********************************************************/n");
  printf("请输入要转换的明文(不转换标点符号),最后请以#符号结束输入:/n");
  gets(ch);
  p=ch;
  while(*p!='/0')
  {
   len++;
   p++;
  }
  if(ch[len-1]=='#')
  {
   Nonetech(len,ch);
   printf("转换后的密文是:");puts(ch);
   printf("是否保存?(Y)");
   tempa=getchar();
   if(tempa=='y'||tempa=='Y')
   {
    printf("输入预保存的文件名: ");
    scanf("%s",name);
    getchar();
    fp=fopen(name,"w");
    for(a=0;a<len;a++)
     fputc(ch[a],fp);
    fclose(fp);
    printf("OK!已经保存到当前目录下%s文件中./n",name);
   }
   else
    getchar();
  }
  else
   printf("错误!请在结尾输入符号#,否则无法进行转换!/n");
  printf("**********************************************************/n");
  printf("是否继续转换?(Y/N)/回主菜单(Z)/n");
  scanf("%c",&choose);
  getchar();
  if(choose=='z'||choose=='Z')
   maindan();
 }
}
void fun()
{
 char ch[N];char choose='y',tempa;char *p;
 while(choose=='y'||choose=='Y')
 {
  int len=0,a;FILE *fp;char name[10];
  printf("**********************************************************/n");
  printf("请输入要转换的明文,最后请以#符号结束输入:/n");
  gets(ch);
  p=ch;
  while(*p!='/0')
  {
   len++;
   p++;
  }
  if(ch[len-1]=='#')
  {
   tech(len,ch);
   printf("转换后的密文是:");puts(ch);
   printf("是否保存?(Y)");
   tempa=getchar();
   if(tempa=='y'||tempa=='Y')
   {
    printf("输入预保存的文件名: ");
    scanf("%s",name);
    getchar();
    fp=fopen(name,"w");
    for(a=0;a<len;a++)
     fputc(ch[a],fp);
    fclose(fp);
    printf("OK!已经保存到当前目录下%s文件中./n",name);
   }
   else
    getchar();
  }
  else
   printf("错误!请在结尾输入符号#,否则无法进行转换!/n");
  printf("**********************************************************/n");
  printf("是否继续转换?(Y/N)/回主菜单(Z)/n");
  scanf("%c",&choose);
  getchar();
  if(choose=='z'||choose=='Z')
   maindan();
 }
}

void main()
{
 maindan();
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这个问题我可以帮您解决。您需要使用Python的tkinter模块来创建GUI界面,然后使用Python的加密库来加密解密文件。 以下是一个示例代码,可以帮助您实现您的需求: ```python import tkinter as tk import tkinter.filedialog as fd from cryptography.fernet import Fernet # 选择文件并进行加密 def encrypt_file(): # 获取选择的文件路径 file_path = fd.askopenfilename() if file_path: # 读取文件内容 with open(file_path, 'rb') as f: data = f.read() # 生成加密密钥 key = Fernet.generate_key() # 使用密钥加密数据 f = Fernet(key) encrypted_data = f.encrypt(data) # 选择保存文件的路径 save_path = fd.asksaveasfilename(defaultextension='encrypted') if save_path: # 保存加密后的数据 with open(save_path, 'wb') as f: f.write(encrypted_data) # 保存密钥 with open(save_path + '.key', 'wb') as f: f.write(key) # 选择文件并进行解密 def decrypt_file(): # 获取选择的文件路径 file_path = fd.askopenfilename() if file_path: # 选择保存文件的路径 save_path = fd.asksaveasfilename() if save_path: # 读取加密后的数据 with open(file_path, 'rb') as f: encrypted_data = f.read() # 读取密钥 with open(file_path + '.key', 'rb') as f: key = f.read() # 使用密钥解密数据 f = Fernet(key) decrypted_data = f.decrypt(encrypted_data) # 保存解密后的数据 with open(save_path, 'wb') as f: f.write(decrypted_data) # 创建GUI界面 root = tk.Tk() root.title("文件加密解密") root.geometry("300x150") # 添加加密按钮 encrypt_button = tk.Button(root, text="选择文件加密", command=encrypt_file) encrypt_button.pack(pady=10) # 添加解密按钮 decrypt_button = tk.Button(root, text="选择文件解密", command=decrypt_file) decrypt_button.pack(pady=10) # 运行界面 root.mainloop() ``` 这个代码使用了tkinter模块创建了一个简单的GUI界面,当用户点击“选择文件加密”按钮时,它将会弹出一个文件选择框,让用户选择要加密文件。然后,它使用cryptography库中的Fernet算法生成密钥,将文件内容加密后,再将加密后的数据和密钥保存到用户选择的文件路径中。 当用户点击“选择文件解密”按钮时,它将弹出一个文件选择框,让用户选择要解密文件。然后,它会读取加密后的数据和密钥,使用密钥解密数据,并将解密后的数据保存到用户选择的文件路径中。 请注意,这个示例只是一个简单的实现,实际使用时可能需要进行更多的错误处理和安全性检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值