鱼C论坛

 找回密码
 立即注册
查看: 1470|回复: 2

[已解决]有一段代码不理解

[复制链接]
发表于 2021-11-5 21:14:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目
凯撒密码
为了防止信息被别人轻易窃取,需要把电码明文通过加密方式变换成为密文。输入一个以回车符为结束标志的字符串(少于80个字符),再输入一个整数offset,用凯撒密码将其加密后输出。恺撒密码是一种简单的替换加密技术,将明文中的所有字母都在字母表上偏移offset位后被替换成密文,当offset大于零时,表示向后偏移;当offset小于零时,表示向前偏移。
输入格式:输入第一行给出一个以回车结束的非空字符串(少于80个字符);第二行输入一个整数offset。
输出格式:输出加密后的结果字符串。
不理解的代码
ch[j]=((ch[j]-'A')+n)%26+'A';
            if(ch[j]<'A')
                ch[j]=ch[j]+26;
就这一块里面除26取余的作用是什么
最佳答案
2021-11-5 22:16:46
本帖最后由 jackz007 于 2021-11-6 01:04 编辑

         凯撒密码要求输入字母,输出的密文也是字母,
密文 = 明文 + offset
         假如 offset = 8,那么,输入字母 'A' ,密文 = 'A' + 8 =  'I',于是,输入明文 'A' ,得到密文 'I',我们知道,英文字母毕竟有限,总共只有 26 个字母,如果明文的 ASCII 编码足够大,加密以后的数值就会超过字符 'Z' 的 ASCII 编码。比如,当明文是 'X' 时,密文 = 'X' + 8 = 88 + 8 = 96,我们知道,'Z' 的ASCII 编码是 90,96 已经比 90 超出了 6,按照规则,这多出来的 6 应该回卷,加到 'A' 上,得到密文 'G'。
        怎么办呢?方法就是修改加密公式,无论明文是什么字母,密文都不会超出字母的正常范围。
密文 = 'A' + (明文 + offset - 'A') % 26
         很显然, 如果
明文 + offset < 'Z' 
          则
(明文 + offset - 'A') < 26 
          这时,对 26 取余还是这个数本身,加密公式可以直接去掉对 26 取余的操作,于是,加密公式又变回到
密文 = 明文 + offset
         所以,对 26 取余是为了在明文字符 ASCII 编码太大时,让密文字符回卷而设置的,这就是对 26 取余的意义和价值所在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-5 21:55:23 | 显示全部楼层
本帖最后由 jhq999 于 2021-11-5 21:56 编辑

把((ch[j]-'A')+n)得到的数值限定在0到25,多了从头再来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-5 22:16:46 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-6 01:04 编辑

         凯撒密码要求输入字母,输出的密文也是字母,
密文 = 明文 + offset
         假如 offset = 8,那么,输入字母 'A' ,密文 = 'A' + 8 =  'I',于是,输入明文 'A' ,得到密文 'I',我们知道,英文字母毕竟有限,总共只有 26 个字母,如果明文的 ASCII 编码足够大,加密以后的数值就会超过字符 'Z' 的 ASCII 编码。比如,当明文是 'X' 时,密文 = 'X' + 8 = 88 + 8 = 96,我们知道,'Z' 的ASCII 编码是 90,96 已经比 90 超出了 6,按照规则,这多出来的 6 应该回卷,加到 'A' 上,得到密文 'G'。
        怎么办呢?方法就是修改加密公式,无论明文是什么字母,密文都不会超出字母的正常范围。
密文 = 'A' + (明文 + offset - 'A') % 26
         很显然, 如果
明文 + offset < 'Z' 
          则
(明文 + offset - 'A') < 26 
          这时,对 26 取余还是这个数本身,加密公式可以直接去掉对 26 取余的操作,于是,加密公式又变回到
密文 = 明文 + offset
         所以,对 26 取余是为了在明文字符 ASCII 编码太大时,让密文字符回卷而设置的,这就是对 26 取余的意义和价值所在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 21:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表