本帖最后由 jackz007 于 2021-11-6 01:04 编辑
凯撒密码要求输入字母,输出的密文也是字母,
假如 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
复制代码
很显然, 如果
则
这时,对 26 取余还是这个数本身,加密公式可以直接去掉对 26 取余的操作,于是,加密公式又变回到
所以,对 26 取余是为了在明文字符 ASCII 编码太大时,让密文字符回卷而设置的,这就是对 26 取余的意义和价值所在。