论文查重网站建设石家庄市住房和城乡建设厅网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 10:29
当前位置: 首页 > news >正文
论文查重网站建设,石家庄市住房和城乡建设厅网站,对网站建设的评价语,wordpress网站插件**实验2#xff1a;传统密码技术 【实验目的】 通过本次实训内容#xff0c;学习常见的传统密码技术#xff0c;通过编程实现简单代替密码中的移位密码算法#xff0c;加深对传统密码技术的了解#xff0c;为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移… 实验2传统密码技术 【实验目的】 通过本次实训内容学习常见的传统密码技术通过编程实现简单代替密码中的移位密码算法加深对传统密码技术的了解为深入学习密码学奠定基础。【技能要求】 分析简单代替密码中的移位密码算法的功能需求详细设计实现简单代替密码中的移位密码算法的数据结构和流程给出测试用例和测试步骤得出测试和结论。简单代替密码中的移位密码算法必须提供加密和解密两个接口int encrypt()和int decrypt()。当加密或者解密成功时返回CRYPT_OK失败时返回CRYPT_ERROR。 【实验内容】 利用自己熟悉的程序设计语言实现简单代替密码中的移位密码。要求程序给出源代码以及相应的注释实验结果截图。 根据实验要求我们将实现一个简单的移位密码也称为凯撒密码算法。这种加密方法是通过将字母表中的每个字母向前或向后移动固定数量的位置来进行加密和解密的。例如如果移位数为3那么A会被替换为DB会变成E以此类推。
规范代码演示
#include stdio.h
#include string.h
#include ctype.h#define CRYPT_OK 0
#define CRYPT_ERROR -1// 加密函数
int encrypt(char *text, int shift) {if (shift 0 || shift 25) {return CRYPT_ERROR; // 移位数必须在0到25之间}for (int i 0; text[i] ! \0; i) {if (isalpha(text[i])) { // 只处理字母字符char base isupper(text[i]) ? A : a;texti base; // 计算新的字符位置}}return CRYPT_OK;
}// 解密函数
int decrypt(char *text, int shift) {return encrypt(text, 26 - (shift % 26)); // 解密就是使用相反方向的移位
}int main() {char text[100];int shift;// 获取用户输入的文本printf(请输入要加密的文本: );fgets(text, sizeof(text), stdin);text[strcspn(text, \n)] 0; // 去掉换行符// 获取移位数printf(请输入移位数(0-25): );if (scanf(%d, shift) ! 1 || shift 0 || shift 25) {printf(无效的移位数。\n);return CRYPT_ERROR;}// 加密if (encrypt(text, shift) CRYPT_OK) {printf(加密后的文本: %s\n, text);} else {printf(加密失败。\n);return CRYPT_ERROR;}// 解密if (decrypt(text, shift) CRYPT_OK) {printf(解密后的文本: %s\n, text);} else {printf(解密失败。\n);return CRYPT_ERROR;}return 0;
}测试用例和步骤
运行程序。输入要加密的文本例如 “Hello, World!”。输入一个有效的移位数例如 3。检查输出的加密文本是否正确例如对于移位3应得到 “Khoor, Zruog!”。检查解密后的文本是否与原始文本相同。
运行截图 注意事项
程序假设输入文本不会超过99个字符。程序只处理英文字符非字母字符保持不变。使用fgets来读取包含空格的字符串而strcspn用于去除末尾的换行符。decrypt函数实际上调用了encrypt函数但使用了相反的移位数来实现解密。
这个程序可以作为一个基础示例你可以根据需要添加更多的功能或改进错误处理逻辑。
核心代码加密逻辑
移位密码凯撒密码的核心思路。
移位密码的基本概念
移位密码是一种简单的替换加密方法。它通过将字母表中的每个字母向前或向后移动固定数量的位置来进行加密。例如如果移位数是3那么A会被替换成DB会替换成E以此类推。对于字母表的末尾Z会绕回到A继续计算。
实现步骤 遍历字符串 你需要逐个检查输入文本中的每一个字符。如果遇到非字母字符如空格、标点符号等则保持不变。如果遇到字母字符则进行移位操作。 处理大小写 英文有大写字母和小写字母所以需要分别处理。大写字母从’A’到’Z’小写字母从’a’到’z’。为了方便处理我们可以先确定当前字母是大写还是小写然后基于相应的基准字母大写是’A’小写是’a’进行移位。 计算新的字符位置 计算当前字母与基准字母之间的距离。加上移位数。使用模运算% 26来确保结果在0到25之间。最后再加上基准字母得到新的字符。
代码详解
下面是对核心代码的进一步简化解释
for (int i 0; text[i] ! \0; i) {if (isalpha(text[i])) { // 只处理字母字符char base isupper(text[i]) ? A : a;texti base; // 计算新的字符位置}
}逐行解释 遍历字符串 for (int i 0; text[i] ! \0; i) {这一行代码使用for循环遍历字符串text中的每个字符直到遇到字符串结束符\0。 只处理字母字符 if (isalpha(text[i])) {isalpha函数检查当前字符是否为字母。如果是字母进入花括号内的代码块如果不是跳过该字符。 确定基准字母 char base isupper(text[i]) ? A : a;isupper函数检查当前字符是否为大写字母。如果是大写字母base设置为A如果是小写字母base设置为a。这样可以确保我们对大写和小写字母分别进行正确的移位。 计算新的字符位置 texti base;text[i] - base计算当前字符与基准字母之间的距离。例如如果text[i]是D且base是A那么D - A等于3。 shift加上移位数。例如如果shift是3那么3 3等于6。% 26取模26以确保结果在0到25之间。这样可以处理移位超过字母表长度的情况。 base再加上基准字母base得到最终的新字符。例如如果base是A那么6 A就是G。最终text[i]被替换为新的字符。
示例
假设text是 “Hello”shift是3
对于HASCII 72base是AASCII 6572 - 65 3等于1010 % 26等于1010 65等于75所以H变成K。对于eASCII 101base是aASCII 97101 - 97 3等于77 % 26等于77 97等于104所以e变成h。其他字符类似处理。
最终“Hello加密后会变成Khoor”。
这个过程对于解密也是类似的只是移位的方向相反。
附加
关于isalpha, iswalpha isalpha© 返回值isalpha()函数返回一个非零值通常为1如果参数c位于范围’A-Z’或’a-z’内。这意味着c是一个英文字母。参数c是要测试的整数值。依赖性isalpha()的结果取决于当前locale区域设置的LC_CTYPE类别设置。可以通过setlocale()函数更改locale设置。 iswalpha© 返回值iswalpha()函数仅在满足以下条件的情况下返回非零值c是一个宽字符且iswupper()或iswlower()也为真。也就是说c是一个由实现定义的集合中的任何宽字符对于这些字符iswcntrl(), iswdigit(), ispunct(), 或 isspace()都不为真。参数c是要测试的宽字符。依赖性iswalpha()的结果独立于locale不受locale影响。
这两个函数都返回0如果参数c不满足测试条件。
- 上一篇: 论网站建设技术的作者是谁wordpress开发插件
- 下一篇: 论文明星个人网站建设爱ppt网站
相关文章
-
论网站建设技术的作者是谁wordpress开发插件
论网站建设技术的作者是谁wordpress开发插件
- 技术栈
- 2026年04月20日
-
论坛网站制作模板杭州萧山做网站
论坛网站制作模板杭州萧山做网站
- 技术栈
- 2026年04月20日
-
论坛网站制作费用昆山智能网站建设
论坛网站制作费用昆山智能网站建设
- 技术栈
- 2026年04月20日
-
论文明星个人网站建设爱ppt网站
论文明星个人网站建设爱ppt网站
- 技术栈
- 2026年04月20日
-
论文网站网站制作前景怎么样
论文网站网站制作前景怎么样
- 技术栈
- 2026年04月20日
-
论文引用网站数据 如何做注释做影视网站不备案
论文引用网站数据 如何做注释做影视网站不备案
- 技术栈
- 2026年04月20日
