加密文件

2023-11-03

!!记得不要抄!!
【问题描述】有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:
在这里插入图片描述
加密字母的对应关系如下
在这里插入图片描述
其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。

【输入形式】从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。
【输出形式】加密后结果输出到文件output.txt中。
【样例输入】
feather
和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:
c language is wonderful.
【样例输出】加密后output.txt文件中内容为:
a ufqzjfzh xl gpqthmrju.
【样例说明】首先将给定的密钥单词去除重复字母,然后按照上面的加密对应表对encrypt.txt文件内容进行加密即可得到加密后的文件,其中只对英文字母进行加密对换,并且假设encrypt.txt中的英文字母全是小写字母。

方法一

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

void repeat(char *s);

char s[55];
int len_s;

int main()
{
    int len = 25; //len是26个字母,下标25
    scanf("%s", &s);
    repeat(s);
    for (int i = 0; i < 26; i++)
    {
        int flag = 0;
        for (int j = 0; j < len_s; j++)
        {
            if (s[j] == 'a' + i)
            {
                flag++;
                break;
            }
        }

        if (flag == 0)
        {
            s[len--] = 'a' + i; //补全26个字
        }

    } //经过调试s数组以正确

    FILE *fp, *pp;
    fp = fopen("encrypt.txt", "r");
    pp = fopen("output.txt", "w");

    char ch;
    ch = fgetc(fp);
    while (ch != EOF) //对应字母进行输出
    {
        if (!isalpha(ch))
        {
            fputc(ch, pp);
        }
        else
            fputc(s[ch - 'a'], pp);
        ch = fgetc(fp);

    }
    fclose(fp);
    fclose(pp);
}

void repeat(char *s) //去重
{
    int i, j, b, c;
    j = c = 0;

    for (i = 0; s[i]; i++)
    {
        b = s[i] - 'a';
        if ((c & (1 << b)) == 0)
        {
            s[j++] = s[i];
            c |= 1 << b;
        }
    }
    len_s = j;
}

方法二

#include <stdio.h>
#include <string.h>
char code_prepart[55], code[26], BUFF[1026];
void cut_similar(char pre_cut[], char after_cut[])
{
    for (int i = 0; i < strlen(pre_cut); i++)
    {
        for (int j = i - 1; j > -1; j--)
        {
            if (pre_cut[j] == pre_cut[i])
                pre_cut[i] = 1;
        }
    }
    for (int i = 0, j = 0; i < strlen(pre_cut); i++)
    {
        if (pre_cut[i] != 1)
        {
            after_cut[j] = pre_cut[i];
            j++;
        }
    }
}
void code_creat(char c[], char code[])
{
    cut_similar(c, code);
    int type = 0;
    for (int i = strlen(code), j = 1; i < 26;)
    {
        code[i] = 123 - j;
        type = 0;
        for (int k = 0; k < i; k++)
        {
            if (code[i] == code[k])
            {
                j++;
                type = 1;
                break;
            }
        }
        if (type == 0)
        {
            i++;
            j++;
        }
    }
}
int main()
{
    fgets(code_prepart, 55, stdin);
    for (int i = 0;; i++)
    {
        if (code_prepart[i] == '\r' || code_prepart[i] == '\n')
        {
            code_prepart[i] = '\0';
            break;
        }
    }
    code_creat(code_prepart, code);
    /*for (int i = 0; i < strlen(code); i++)
        printf("%c", code[i]);*/
    FILE *input_document = fopen("encrypt.txt", "r");
    FILE *output_document = fopen("output.txt", "w");
    int i = 0;
    while (fscanf(input_document, "%s", BUFF) != EOF)
    {
        int j = strlen(BUFF);
        if (i != 0)
            fputc(' ', output_document);
        for (int k = 0; k < j; k++)
        {
            if (BUFF[k] < 123 && BUFF[k] > 96)
                fputc(code[BUFF[k] - 'a'], output_document);
            else
                fputc(BUFF[k], output_document);
            BUFF[k] = '\0';
        }
        i++;
    }
    fclose(input_document);
    fclose(output_document);
    return 0;
}

BUAA?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

加密文件 的相关文章

随机推荐

  • 二进制补码运算

    在计算机系统中 数值一律用补码来表示和存储 原因在于 使用补码 可以将符号位和数值域统一处理 同时 加法和减法也可以统一处理 此外 补码与原码相互转换 其运算过程是相同的 不需要额外的硬件电路 补码运算 正数补码是其原码 负数的补码为其数值
  • react使用dnd实现简单的拖拽排序

    在react项目中使用dnd实现一个简单的拖拽排序功能 首先简单的介绍一下dnd React DnD是一组React实用程序 可帮助您构建复杂的拖放界面 同时保持组件之间的耦合 1 DndProvider组件为您的应用程序提供React D
  • Vue 3 快速上手

    Vue 3 快速上手 官网 配置环境变量和nodejs node vue 开发环境搭建 第二天的时候 vue create xxx xxx xxx 项目名 失败 前端项目问题解决 第二天修改环境配置之后 纠正之后 概念 思想 创建项目 cm
  • 国产适配之MySQL替换为达梦8数据库

    1 背景 项目中要做国产化 MySQL要替换成达梦8数据库 项目中MySQL的建表语句和内置数据通过 sql文件维护 安装时会初始化表结构和表内置数据 项目架构为SpringBoot JPA Mybatis 适配工作内容包括数据库迁移 数据
  • Vue实现点击更改页面字体大小

    html 1 点击大中小 页面字体会切换到对应的css样式 2 big mid sml 代表预设定了三种字体大小 3 on 代表当前选中了哪一个的样式 big min sml 选中后字体加粗 4 v html 利用后端传来的页面数据 通过v
  • text段、data段和bss段知识介绍

    一 总体概述 1 bss 可读可写 bss是英文Block Started by Symbol的简称 通常是指用来存放程序中未初始化的全局变量的一块内存区域 在程序载入时由内核清0 BSS段属于静态内存分配 它的初始值也是由用户自己定义的连
  • go语言基础2——流程控制if、for、switch、goto、break、continue

    目录 if else 分支结构 if条件判断基本写法 if条件判断特殊写法 for 循环结构 无限循环 for range 键值循环 switch case goto 跳转到指定标签 break 跳出循环 continue 继续下次循环 练
  • html手风琴效果代码,一款漂亮的纯CSS手风琴效果代码

    本文分享了纯css实现的手风琴 喜欢的朋友可以看看 源码CSS部分 accordionMenu width 500px margin 0 auto padding 10px background size fff color 424242
  • 前端代码深浅拷贝四种方式

    今天公司的实习生有问我代码怎么深拷贝 下面我就给大家整理四种前端代码深拷贝的四种方式 前端数据分为基本数据类型和引用数据类型 当我们拷贝引用数据类型的时候 我们希望改变新数组 对象 不改变原本的数组 对象 我们往往会深拷贝数据 下面是四种深
  • Python paramiko文件传输显示上传下载进度条源码 - stdout

    本文Python Code基于chatGPT的推荐 并修改调试实际运行通过 供学习参考 通过使用python paramiko库 实现文件传输 包括上传和下载 并且同步显示上传和下载进度条信息 实时获取传输进度 避免print方式频繁刷屏困
  • Spring Boot 配置多数据源

    Spring Boot 配置多数据源 作者 Grey 原文地址 博客园 Spring Boot 配置多数据源 CSDN Spring Boot 配置多数据源 说明 本文主要介绍了 Spring Boot 下如何配置多数据源 环境和版本 Ja
  • 静态路由综合实验

    目录 实验要求 实验步骤 1 子网划分 2 配置IP和环回 3 配置静态路由 实现全网可达 4 配置缺省路由 使R1 R4可以访问5 5 5 5 24 5 配置空接口防环 6 ping测试 实验要求 1 除R5的环回地址固定以外 整个其他所
  • 10个最好的 jQuery 视频插件

    在这篇文章中已经收集了10个最佳的jQuery视频插件 帮助开发人员容易地实现网站播放影片功能 可以显示视频和视频播放列表 1 Bigvideo js BigVideo js 是一个jQuery插件能够 让你很方便将视频作为网站的背景 它可
  • FCM算法的matlab实现(Fuzzy C-means 算法)

    FCM算法 F C M FCM FCM算法简介 F C M FCM FCM算法原理 F C M FCM FCM算法实现 m a t l a b matlab matlab F C M FCM FCM算法简介 F C M FCM FCM算法属
  • `com.mysql.jdbc.Driver‘. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver‘的解决办法

    com mysql jdbc Driver This is deprecated The new driver class is com mysql cj jdbc Driver 的解决办法 说多了都是泪 搭建这个项目遇到的问题太多了 cs
  • Tensorflow中问题总结

    1 ValueError Variable bar v does not exist or was not created with tf get variab le Did you mean to set reuse None in Va
  • 基于Tensorflow卷积神经网络(CNN)的人脸年龄和性别检测系统

    文件大小 150M 开发环境 Python3 7 OpenCV4 0 1 24 Tensorflow1 13 1 PyCharm2020 点击下载 点击下载 简要概述 基于Tensorflow卷积神经网络 CNN 的人脸年龄和性别检测系统
  • Unity BRDF公式解析

    根据BRDF公式 高光项部分 只能物体的表面的粗糙度有关 Roughness有关 大部分公式都是 根据Cook Torrance 的微表面高光BRDF公式 我们把高光分成三项 D项 Normal Distribution Function
  • 正则表达式如何同时添加左右括号 sub_python小课堂24 - 正则表达式(二)

    python小课堂24 正则表达式 二 前言 今天继续来介绍一下python的正则表达式 回顾一下上次介绍的re模块整篇文章围绕着re findall 来进行实例的讲解 也就是所谓的查询操作 为了便于回顾 这里给出链接 python小课堂2
  • 加密文件

    记得不要抄 问题描述 有一种加密方法为 其使用一个字母串 可以含重复字母 字母个数不超过50 作为密钥 假定密钥单词串为feather 则先去掉密钥单词中的重复字母得到单词串feathr 然后再将字母表中的其它字母以反序追加到feathr的