6-4 字符串加密

6-4 字符串加密 (10 point(s))

本题要求实现一个函数,能对一行字符串(字符串的长度<80)加密。 加密函数采用的加密算法:如果不是英文字母,就不加密,原样显示;否则就将字母加上一个偏移值5实现加密。注意大小写英文字母分别构成一个封闭环,如字符‘w’,加密后为字符‘b’。

函数接口定义:

void cryptograp(char ch[],int n);

其中给定一行英文字符串存放在数组ch[]中,n是这行字符串的实际长度。

裁判测试程序样例:

#include<stdio.h>
#include<string.h>
void cryptograp(char ch[],int n);    //加密函数

int main()
{
    int count = 0;
    char text[80] = {'\0'};            //存放明文字符串

    gets(text);
    count = strlen(text);
    cryptograp(text,count);
    printf("加密后的密文是:\n%s\n", text);
    return 0;
}

/* 请在这里填写答案 */

输入样例:

Hello World!

结尾无空行

输出样例:

加密后的密文是:
Mjqqt Btwqi!

结尾无空行

 

void cryptograp(char ch[],int n)
{
    int i;
    for(i=0;i<n;i++)//u v w x y z;
    {
        if(ch[i]>='a'&&ch[i]<='u') ch[i]=ch[i]+5;
        else if(ch[i]>='v'&&ch[i]<='z')ch[i]='a'+ch[i]-'v';
        if(ch[i]>='A'&&ch[i]<='U') ch[i]=ch[i]+5;
        else if(ch[i]>='V'&&ch[i]<='Z')ch[i]='A'+ch[i]-'V';
    }
}

在开发一个针对长度为6到9个字符字符串加密程序时,可以采用简单的替换加密或变换加密方法。以下是一个基于字符替换和位运算的加密方案示例,适用于英文字符,并确保输入字符串长度在指定范围内。 ### 加密规则设计 1. **字符替换**:将每个字母替换为其在字母表中的对称字符(例如,`A` 替换为 `Z`,`B` 替换为 `Y`)。 2. **位运算**:对每个字符进行按位异或操作,使用固定的密钥(例如 `'k'` 的 ASCII 值 107)。 3. **长度检查**:如果输入字符串长度不在 6 到 9 之间,则提示错误并终止程序。 ### 示例代码 ```c #include <stdio.h> #include <string.h> #include <ctype.h> // 加密单个字符 char encryptChar(char ch, char key) { if (!isalpha(ch)) { return ch; // 非字母字符加密 } char base = islower(ch) ? 'a' : 'A'; char offset = ch - base; char mirrored = base + ('z' - base - offset); // 对称字符 return mirrored ^ key; // 异或加密 } // 加密整个字符串 void encryptString(const char *input, char *output, const char *key) { int len = strlen(input); if (len < 6 || len > 9) { printf("输入字符串长度必须在6到9个字符之间。\n"); output[0] = '\0'; // 设置为空字符串 return; } for (int i = 0; input[i] != '\0'; i++) { output[i] = encryptChar(input[i], key[i % strlen(key)]); } output[len] = '\0'; // 确保字符串结束 } int main() { char input[100]; char encrypted[100]; char key[] = "secret"; // 密钥 printf("请输入一个英文字符串6-9个字符): "); fgets(input, sizeof(input), stdin); input[strcspn(input, "\n")] = '\0'; // 移除换行符 encryptString(input, encrypted, key); if (encrypted[0] != '\0') { printf("加密后的字符串为: %s\n", encrypted); } return 0; } ``` ### 加密逻辑说明 1. **字符替换**:通过计算字母表对称字符实现简单替换,增强安全性。 2. **位运算**:使用 XOR 操作结合动态密钥,提高解密难度。 3. **密钥管理**:密钥可自定义,支持更灵活的安全策略。 4. **长度验证**:确保输入字符串符合要求,避免无效数据处理。 ### 可选改进方向 - **增混淆字符**:在加密后插入随机字符以扰乱顺序。 - **多轮加密**:多次应用不同加密算法提升安全性。 - **支持数字与符号**:扩展加密规则以涵盖更多字符类型。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值