当前位置:首页 >> 数学 >> 在TI 图形计算器上编程实现

在TI 图形计算器上编程实现


在 TI 图形计算器上编程实现 基于 Vigenè re 密码的自创加密和解密算法
北京市第八十中学 邓泽琨 前言
我在这学期开学就接触到了这款型号为 TI-Nspire CX-C CAS 的图形计算器。 它的功能非常强大, 除了基本运算, 我们还可以用它来进行整式计算、 因式分解、 解方程(组)等高级计算。它还有图形、列表与电子表格等应用程序,可以在课 上用来研究函数的性质。 我在平时课堂上主要用它来验算整式计算和解方程的结 果,并且还编写了一些简易的程序。这个学期过后,我已经熟练地掌握了该图形 计算器的多数操作方法。

一、提出问题
日常生活中,我们都迫切地需要保护个人隐私。最近,经常有同学的 QQ 被 盗,让大家更关注自己的隐私安全了。而密码是我们隐私安全的一道重要防线。 密码越难以破译,我们的隐私就越安全。 于是我想,如果我也能用一种非常难破译的密码来对我的隐私加密该多好 呢?

二、寻找解决策略
之前我见过这样一道数学题:
……有一种密码的明文(真实文)按计算机键盘字母排列分解,其中 Q 、W、 E、……、N、M 这 26 个字母依次对应 1、2、3、……、25、26 这 26 个自然数(见 下表) : Q 1 F 14 W 2 G 15 E 3 H 16 R 4 J 17 T 5 K 18 Y 6 L 19 U 7 Z 20 I 8 X 21 O 9 C 22 P 10 V 23 A 11 B 24 S 12 N 25 D 13 M 26

? ? ?x ? ? ? 给出一个变换公式: ? x? ? ? ? ? x? ? ?

x ( x是自然数, 1 ? x ? 26,x被3整除), 3 x?2 ? 17( x是自然数, 1 ? x ? 26,x被3除余1), 3 x ?1 ? 8( x是自然数, 1 ? x ? 26,x被3除余2). 3
(接下页)

(接上页) 将明文转换成密文,如:4→

11 ? 1 4?2 +17=19,即 R 变为 L,11→ +8=12, 3 3

即 A 变为 S; 将密文转换成明文,如:21→3×(21-17)-2=10,即 X 变为 P,13→3×(13 -8)-1=14,即 D 变为 F.

这种密码被称为代换密码,似乎很安全。 但是仔细思考后会发现,在明文中有一个字母出现 n 次,在密文中就也会有 一个字母出现 n 次。所以人们据此得到了破译此类密码的好办法,即字频统计。 所以这种密码也并不安全。 于是我又想到了以前听说过的一种密码,叫做 Vigenè re 密码,由 16 世纪法 国外交家 Blaise de Vigenè re 设计。以下是这种密码的加密方式: 在 Vigenè re 密 码中,密钥 k 是一个 字母串, k=k1k 2 ...k n 。当明文

M=m1m2 ...mn 时,得到的密文 C=c1c2 ...cn ,其中 ci =mi ?k i ,运算?的规则如
下表所示:

当明文 M 的长度大于密钥 k 的长度时,将密钥 k 重复使用。

与以前的密码不同的是,Vigenè re 密码引入了“密钥”的概念,即根据密钥 来决定用哪一行的密表来进行替换,以此来对抗字频统计。 这种密码一直以来被 认为是不可破译的。直到 19 世纪 50 年代,一位英国人才找到了破译方法,足见 这种密码的安全性。

三、在图形计算器上编程实现原算法
刚开始,我准备先实现加密,之后解密也就很容易了。 下图是加密程序的基本流程图。
输入明文 M 和密钥 k

循环初值 i=1

i≤明文位数 是 提取 mi 并存储



提取 ki 并存储

循环间隔 i=i+1

i≤明文位数 是 计算得出 ci =mi ?k i 否 合并 c 1 ,c 2 , …,c i-1 和 c i

循环间隔 i=i+1

输出密文 M

有了框架之后,下面就有两个大问题需要解决了。 如何提取一个字符? 我在网上查找了一些资料, 发现 TI Basic 并不提供直接提取一个字符的 函数。但是,我发现,有这两个函数组合使用就能达到目的了: left(字符串 a,整数 n) right(字符串 a,整数 n) 这 两 个 函数 分别 返 回这 个 字符 串左 起 或右 起 的 n 个 字符 。 如 left(“hello ”,3)返回 ”hel ”。 而如果想要提取字符串”vigenere ”中的左起第 4 个字符,我们就可以这 样做: right(left( “vigenere ”,4),1) 即先提取出左起的 4 个字符,然后再提取出这 4 个字符的右起的第 1 个字符。 这样,提取字符的问题就被解决了。 ?运算如何实现? 通过观察不难发现,密表中的每一行字母都相对于上一行整体左移了。 我以前了解到,在电脑上,每个字符都有其唯一对应的 ASCII 码。而 且,26 个英文字母的 ASCII 码都是相邻并且从 A 到 Z 递增的。所以我猜想 在 TI 图形计算器中也有类似的文字编码。 通过在函数库中寻找,我发现 TI 图形计算器的确有这样的编码。在 TI 图形计算器中,大写字母 A-Z 对应的编码是 65 至 90,而小写字母 a-z 对应 的编码是 97 至 122。 编码的使用方式是这样的: char(65) ord(“z”) 两个函数的结果分别是”A”和 122。 那么,现在?运算就变得很容易实现了。 注:为了简易,程序不接受除小写英文字母以外的字符。 密表中的每一行字母都相对于上一行整体左移, 也就代表每个明文字母 对应的密文字母的编码都加了 1。 也就是说,对于第 i 位,明文的字母序数(A 为 1,…Z 为 26)为
ord(mi ) mod 96

而密钥会对明文的字母序数带来
ord(ki ) mod 96-1 ? ord(k i ) mod 97

的改变。 那么,经过?运算后,密文的字母序数便是
[ord(mi ) mod 96+ord(ki ) mod 97] mod 26 (当上式为 0 时,结果为 26)

所以
ci =96+[ord(mi ) mod 96+ord(ki ) mod 97] mod 26

这样,两个问题就都解决了。

而解密程序,大体流程不变,只是进行?的逆运算。 下面是加密、解密二合一程序源码: Define pass()= Prgm Text “Vigen ère 密码加/解密程序” Lbl prev1 Request “加密请输入 1,解密请输入 2”,mode Lbl back If mode=1 Then 引入新字符串 word 的作用是尽量避 word:=“加密的文字” 免后面对 mode 进行重复判断 Else If mode=2 Then word:=“解密的密码” Else Goto prev1 EndIf EndIf RequestStr “输入您想”&word,in RequestStr “输入密钥”,key For i,1,dim(in),1 charin[i]:=right(left(in,i),1) 因为当明文 M 长度大于密钥 k 时, k重 m:=mod(i,dim(key)) 复使用, 所以 M 有几位, k 就也应有几 If m=0 位。mod(i,dim(key)) 表示的是当前正在 m:=dim(key) 进行?运算的那一位 i 应该对应密钥中 charkey[i]=right(left(key,m),1) 的哪一位。 EndFor Text “请确认您要”&word&“是 ”&in&“,密钥是 ”&key&“。” Lbl prev2 DelVar confirm Request “确认请输入 0,修改请输入 1”,confirm If confirm=0 Then

Else If confirm=1 Then Goto back Else Goto prev2 EndIf EndIf out:=“” For i,1,dim(in),1 If mode=1 Then ta:=mod(ord(charin[i]),96)+mod(ord(charkey[i]),97) EndIf If mode=2 Then ta:=mod(ord(charin[i]),96)+26-mod(ord(charkey[i]),97) EndIf tb:=mod(ta,26) If tb=0 tb:=26 charout[i]:=char(tb+96) out:=out&charout[i] EndFor If mode=1 Then text “完成! 加密后的密文是 ”&out&“。 密钥为”&key&“, 请务必谨记。 ” EndIf If mode=2 Then text “完成!解密后的明文是 ”&out&“。” EndIf 最后删除所有变量, DelVar mode,in,key,charin,charkey,charout,out 清除痕迹 EndPrgm 取得了如此的成果,我心中窃喜:我可以对我的小秘密进行加密喽。

四、提出并实现我的新算法
但是仔细想想,这种算法已经被公开,而且流传甚广了,如果我直接使用, 势必会被人迅速破译出来! 于是,我开始思考如何以这种算法为基础创制一个自己的加密算法。 我想到了小学时候就学过的一个知识:质数和分解质因数。 当初学的时候,老师说,质数的用途很广,也包括密码学。由于对一些大数 分解质因数所用的时间很长,所以可以根据这个特性来编制密码。 于是,我有了这样一个想法:

既然在图形计算器里可以把字符转换为数字,那么,如果把一串字符串 r 所 对应的编码按一定方式存储在一个长整数 R 中, 然后对另一串字符串 s 做同样的 操作,把编码存储在一个长整数 S 中,然后得到一个新长整数 P=R×S,那么, 由于 P 的长度,不难认识到,想要由 P 得到 R 和 S 是很困难的。 我的新算法可以概括为二次加密。具体算法是这样的: 首先按照 Vigenè re 密码的算法由明文 M 计算出密文 C 的字母序数; 接着再次利用密钥 k,将密钥 k 的每一位都转换成字母序数,然后从长整数 R 的个位和十位开始,从右往左依次存放每一位的字母序数(占用 2 位) 。 然后将密文 C 每一位的字母序数也按上面的方式存放在长整数 S 里。 最后得到二次加密后的密码 P=R×S。 由于整数的最大长度所限,程序要求密钥必须为 4 位。 下面是加密程序二次加密部分的源码: code:=0 For i,1,dim(in),1 code:=code+mod(charout[i],96)*100^(i-1) If i≤4 Then seckey:=seckey+mod(ord(charkey[i]),96)*100^(i-1) EndIf EndFor out:=code*seckey 下面是加密程序的运行截图(这一次加密程序和解密程序是独立的) :

如果输入的密钥不符合要求,程序会自动返回,要求重新输入。同样,在确 认时,如果输入的数字不是 0 或 1,程序也会要求重新输入。 加密后的密码,可以复制到计算器的记事本里,以期日后查找。

五、反思程序的不足之处
在使用时,我发现程序无论对于多长的密文都不会预先报错,反而是在执行 之后才被提示“溢出” ;如果在应该输入数字的地方输入了字符串,程序也没有 反应,反而是被系统提示“自变量类型错误” 。如果时间充裕,我一定会修复这 些问题。 在编写程序时,我发现变量名称非常的乱,五花八门,而且非常容易混淆或 理解错误。以后,无论编写什么程序,都应当积累经验,让变量名称清晰易懂。

六、总结与收获
通过这次经历,我体会到了有一双能发现和总结规律的眼睛是多么重要。世 间万物,各不相同,但是它们之间都有规律可循。如果不能发现 Vigenè re 密码表 中字母排列的规律,如果不能发现密钥 k 的重复就是余数的轮回,如果不能发现 数字按位存储在长整数里的规律……少了一个,就无法得出算法。 同时,我也对“细节决定成败”这句话有了更深刻的认识。程序中哪怕一个 命令写错了,程序就无法运行;一个变量之差,可能导致结果的天壤之别。只有 一点不差,程序才能得出正确结果。 相信这次撰写论文以及之前的准备经历会使我在今后受益良多。 邓泽琨 北京市第八十中学 2014/8/15


更多相关文档:

利用TI图形计算器开展函数教学的体会_2

另外一方面,利用 TI 图形计算器, 真正实现学生自主探究数学。 一、运用 TI ...y ? x? 1 之间的关系 x 对于图象的叠加 ( x ? 0 )的情况进行 编程 在...

利用TI图形计算器开展函数教学的体会

另外一方面,利用 TI 图形计算器,真正实现学生自主探究数学。 一、运用 TI 计算...1 之间的关系 x 对于图象的叠加 ( x ? 0 )的情况进行 编程 在黑板上演示...

2015.5.31《TI图形计算器的简单使用》教学反思

TI 图形计算器的简单使用》教学反思华润高中 胡同文 在新课程背景下,基于“双基”变“四基” 、 “如何加强学生的基 本的数学活动体验、 积累学生的数学思想...

TI图形计算器在三角函数教学中的实际应用

教师通过无线导航系统,实现即时调查、实时演示、发 送文件等功能。 使用 TI 图形计算器在《三角函数》教学中的实际应用符合《普通高中数学 新课程标准》信息技术...

TI图形计算器是一种既能计算又能作图的新型的数学使用...

通过 TI 图形计算器可以完成象解方程、编程、作图等普通计算器无法 完成的功能...如果利用“分屏”功能,还能实现在同 一窗口对一种对象的不同表示,为学生提供多...

用TI图形计算器的统计功能研究,

总结:TI 图形计算器的统计功能为我们研究物理量之间的关系提供了一个很有价值的工 具, 也使学生学会了一种研究物理量之间关系的方法,那就是:①通过实验测量物理...

使用TI图形计算器辅助算法教学的实践与思考

TI 图形计算器编程实现. 最终如下: 在这个过程中,鼓励学生大胆提出想法,并用 TI 图形计算器编程检验自己的设计,不 仅让学生感受到成功的快乐,更重要的是培养了...

借助TI图形计算器 CAS功能解高考题

借助TI图形计算器 CAS功能解高考题_数学_高中教育_教育专区。收稿日期:2012-07...人们在数学的教学和研 究中,用笔和纸进行的数学运算多为符号运算. 一般来说,...

TI图形计算器在数学教学中的运用探寻_数学论文

TI图形计算器在数学教学中的运用探寻_数学论文_工作范文_实用文档。TI图形计算器在数学教学中的运用探寻_数学论文 提要 在数学课堂教学利用 TI 图形计算器,有...

TI图形计算器在数学教学中的运用探寻

TI图形计算器在数学教学中的运用探寻TI图形计算器在数学教学中的运用探寻隐藏>> TI 图形计算器在数学教学中的运用探寻 蒙自县第一高级中学 万庆 提要 在数学课堂...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com