【VB开源代码栏目提醒】:网学会员VB开源代码为您提供换位密码的加密策略及程序实现 - 期刊论文参考,解决您在换位密码的加密策略及程序实现 - 期刊论文学习中工作中的难题,参考学习。
换位密码的加密策略及
程序实现 数据保密是保证
网络安全的一种重要手段,传统的加密方法有两类:替代密码和换位密码,而后者只对明文字母的次序进行重新排列来达到加密目的,当然还要借助密钥,密钥必须是一个不含重复字母的单词或短语,加密时将明文按密钥长度分成若干行分布在密钥下方,当末行中未填满,则以字母ab……进行补充,密文输出时,需按密钥字母的序列,以列优先的方式输出所有排列的字母。
【举例】 比如现有明文“please execute the latest scheme”,密钥“computer”,那么经过换位后的密文应该是什么呢? 1、先将密钥分布,填写各字母顺序,如图1 c o m p u t e r所示。
0 3 2 4 7 6 1 5 2、将明文去空格后依次填到上述表格的下方 需要说明的,当全部的明文依次填写完毕,如 图1明文中的最后一个字母“e”填写到如图2最后一 c o m p u t e r行第4个单元格,由于明文长度不一定整除于密钥 0 3 2 4 7 6 1 5长度,因此最后一行可能会剩有空格,这些空格 p l e a s e e x用字母“a,b,c,d,……”的顺序进行补充, e c u t e t h e如图2中加粗显示的“abcd”。
l a t e s t s c 3、按密钥字母顺序,以列优先方式输出 h e m e a b c d 如图2完成的明文排列,依照第2行中的密钥 图2字母顺序0,1,……7,先找到0,列向输出字符串为“pelh”,再找到1,输出字符串“ehsc”,……继续直到7,输出为“sesa”,密文已经产生,一般用大写字母表示,为:“PELHEHSCEUTMLCAEATEEXECDETTBSESA”。
【编程分析】 1、密钥分布,填写各字母顺序 密钥数据包括两部分,字母和该字母的顺序,因此自定义一个密钥结构MiYaoData,包括Char As String表元素值,Num As Integer表字母顺序号,这里的num部分不采用举例中的数据,而是按顺序转换成第几个小的数据在哪一列上,下标从0开始,如上数据则变成第0个在第0列,第1个在第7列上,方便密文以密钥字母序号进行列向输出。
先获取密钥字符和长度,根据字母表顺序,产生一组密钥字符的序号。
若依次对照字母表,效率不高,本程序采用先将字符转换成ASCII码,由ASCII码依次比较,用二重循环,分别产生各密钥字符的顺序,如图1。
但在后继密文输出的方便考虑,需要将密钥字符顺序由原来的“pij”的格式转换成“pji”,为防止数据被覆盖,引进另外一个辅助变量,然后复制辅助变量的数据,一一修改原数据。
具体如下:s TrimTxtMiYao.Text ‘读取密钥max Lens ‘获取密钥长度‘逐个获取密钥字母(不应重复)For i 0 To max - 1 pi.Char Mids i 1 1 pi.Num max‘为查找做准备,用一个数标记没有被登记过Next‘对应英文字母表,逐个填写密钥字母的顺序,为生成密文输出作准备For i 0 To max - 1 ‘查找当前小的密钥字符所在下标 MinAsc Ascz 10 ‘将一个大数作为当前最小值 For j 0 To max - 1 If Ascpj.Char MinAsc And pj.Num max Then MinAsc Ascpj.Char ‘更改最小值 Mindex j ‘登记其下标 End If Next ‘当前最小值找到,修改数据(下标) pMindex.Num i ‘重写数据Next‘将pi.numj的格式转换成pj.numi‘防止数据覆盖,转换结果另存For i 0 To max - 1 tpi.Num i ‘转换格式Next‘将另存结果,写入原始数据中For i 0 To max - 1 pi.Num tiNext2、将明文去空格后依次填到上述表格的下方去除明文中的空格采用Replaces 函数实现。
s TxtMingWen.Texts Replaces 随后填写明文中的各字母,用二维数组MingWen实现。
For i 0 To Lens - 1 MingWeni max i Mod max Mids i 1 1 Next 由于明文长度不一定正好整除于密钥长度,导致最后一行数据未填充满, 此时从字母a开始,以字母表顺序进行补充。
For j i - 1 Mod max 1 To max - 1 MingWeni - 1 max j Chr96 - i - 1 Mod max j Next 以上语句同样适用于不补充状态。
3、按密钥字母顺序,以列优先方式输出 明文按规则已经写入,只要按密钥字母顺序,以列向输出各字母,即生成密文。
对比以横向输出的明文,密文则以列向输出,可以看成矩阵转置,其实在输出时只要交换二重循环上的内外变量即可实现,并且输出密文一律用大写字母表示。
TxtMiWen.Text ‘按密钥字母的顺序,转置明文,生成密文 For j 0 To max - 1 ‘初始明文矩阵的列范围 ss ‘初始明文矩阵的行范围 For i 0 To Lens max - 1 max - 1 ss ss UCaseMingWeni pj.Num ‘转换成大写字母 Next TxtMiWen.Text TxtMiWen.Text ss ‘显示密文 Next 【编程实现】 启动
VB,添加相关文字“明文”、“密钥”、“密文”,添加三个文本框分别显示明文、密钥和密文,添加一个“生成密文”的按钮,编程分析中的部分
代码都写在该按钮的click事件上。
运行界面如图3所示。
若将密钥改成“compute”,对 于 相 同 的 明 文 , 则 密 文 变 为“PXHTETSEECLCLEESAUAHEEEMSTTE”。
图3