用VB打造个人版恺撒密码转换器
看了这一段英文,是不是觉得有点摸不着头脑?这段英文的原文是How are you ?,只不过被我加密了,而我加密的算法则是著名的恺撒(Caesar)密码。现在,我们就一起来学习使用VB打造一个个人版的恺撒密码^_^
知己知彼
首先我们要来了解一下恺撒密码:
公元前60年(大约两千年前),古罗马统帅“朱利叶斯·凯撒”(Caesar),第一个用当时发明的“凯撒密码”书写军事文书,用于战时通信。后来他成了古罗马帝王,就是“凯撒”(Caesar)大帝。
凯撒加密法简而言之,就是字母替换加密,消息中每一个字母换成向后三个字母的字母的。大家请看下表
密文:defghijklmnopqrstuvwxyzabc 或者 DEFGHIJKLMNOPQRSTUVWXYZABC
设计算法
了解了恺撒密码之后,我们要设计算法。请看流程图
图片附件: [流程图] SpxImage1.jpg (2007-1-13 19:18, 127.74 K)
大家可以看到,我们这里首先需要定义一个字母表,然后使用Len获取长度,接着使用For遍历要转换的每一个字符,最后使用在将获取字符在字母表内查找,并用IF判断是否是英文字母,如果是,则进行相关转换,如果不是,则不执行任何操作。
代码编写
确定算法之后,我们可以开始编写代码
CODE:
If Len(txtBefore.Text) = 0 Then
MsgBox "请输入要加密的原文!", vbExclamation
End If
On Error GoTo Fal
Dim strPasswordOne As String, strEncrypt As String, lngEncrypt As Long, lngTime As Long, strOne As String, bytMove As Byte
strPasswordOne = "abcdefghijklmnopqrstuvwxyzabcABCDEFGHIJKLMNOPQRSTUVWXYZABC"
strEncrypt = txtBefore.Text '//获取文本
lngEncrypt = Len(strEncrypt) '//获取要转换的字符个数
For lngTime = 1 To lngEncrypt '//使用For遍历读取每一个字符,合法的转换,不合法的保留
strOne = Mid$(strEncrypt, lngTime, 1): bytMove = InStr(1, strPasswordOne, strOne, vbBinaryCompare) '//查找字母的位置
If bytMove <> 0 Then
Mid$(strEncrypt, lngTime, 1) = Mid$(strPasswordOne, bytMove + 3, 1) '//填充转换后的数据
End If
Next
txtAfter.Text = strEncrypt '//显示
Exit Sub
Fal:
MsgBox "密码转换出错,请检查所输入的数据!", vbExclamation '//容错处理
或许有人对strPasswordOne = "abcdefghijklmnopqrstuvwxyzabcABCDEFGHIJKLMNOPQRSTUVWXYZABC"这段代码感到疑惑,为什么xyz和XYZ之后又有abc和ABC。其实我们想想看,如果要加密的字母是xzy或者XYZ,那凯撒密文就是abc和ABC,这样,又必须想方设法转到开头,而后面的abc和ABC则很好的绕过了这个问题。况且Instr函数指挥查找相应字符第一次出现的位置。或许你还会发现,小写字母在大写的前面,这是因为一般英文文章小写字母居多,所以放在前面。
还有Mid$(strEncrypt, lngTime, 1) = Mid$(strPasswordOne, bytMove + 3, 1) '//填充转换后的数据这段,前面的Mid和后面的Mid是完全不同的两种作用。前者是函数,作用是查找文字,后者是语句,用于填充原来的数据。(更详细请看MSDN)
至于有些字符串函数后面添加$,这是为了增加处理速度,后面的$表示不对数据进行检查,而且操作数据越多,表现越明显。
而后面的出错设计则是为了防止恶意输入^_^
然后我们在编写解密代码。或许你会认为解密和加密除了字母后移之外一模一样的话,那么恭喜你,你错了...-_-!
如果你用Instr函数在加密的字母表内查找的话,会出现一个问题,如果密文是abc的话,原文是xyz,但是如果你往左移三行,发现移不下去了,或许你会想在abc前面加xyz,但是别忘了,Instr函数查找的时字符第一次出现的位置,如果查到xyz的话,又是死路...
不过,幸运的时,VB6为我们提供了一个解决这个问题的函数——InstrRev。该函数与Instr函数类似,只是从字符串末尾开始查找。所以,我们只要将字符如此定义即可:
strPasswordTow = "XYZABCDEFGHIJKLMNOPQRSTUVWXYZxyzabcdefghijklmnopqrstuvwxyz"
CODE:
MsgBox "请输入要解密的密文!", vbExclamation
End If
On Error GoTo Fal
Dim strPasswordTow As String, strDecrypt As String, lngDecrypt As Long, lngTime As Long, strOne As String, bytMove As Byte
strPasswordTow = "XYZABCDEFGHIJKLMNOPQRSTUVWXYZxyzabcdefghijklmnopqrstuvwxyz"
strDecrypt = txtBefore.Text '//获取文本
lngDecrypt = Len(strDecrypt) '//获取要转换的字符个数
For lngTime = 1 To lngDecrypt '//使用For遍历读取每一个字符,合法的转换,不合法的保留
strOne = Mid$(strDecrypt, lngTime, 1): bytMove = InStrRev(strPasswordTow, strOne, 58, vbBinaryCompare) '//查找字母的位置
If bytMove <> 0 Then
Mid$(strDecrypt, lngTime, 1) = Mid$(strPasswordTow, bytMove - 3, 1) '//填充转换后的数据
End If
Next
txtAfter.Text = strDecrypt '//显示
Exit Sub
Fal:
MsgBox "密码转换出错,请检查所输入的数据!", vbExclamation '//容错处理
如此这般,加密和解密的功能都解决了。至于其他的大家可以自己编写。我的全部代码如下:
CODE:
Private Declare Sub InitCommonControls Lib "comctl32.dll" ()
Private Sub cmdAbout_Click()
Load frmAbout
frmAbout.Show 1
End Sub
Private Sub cmdClear_Click()
If MsgBox("此操作会清理掉所有文本,确定要执行吗?", vbQuestion + vbYesNo) = vbYes Then
txtBefore.Text = "": txtAfter.Text = ""
End If
End Sub
Private Sub cmdDecrypt_Click()
If Len(txtAfter.Text) = 0 Then
MsgBox "请输入要解密的密文!", vbExclamation
End If
On Error GoTo Fal
Dim strPasswordTow As String, strDecrypt As String, lngDecrypt As Long, lngTime As Long, strOne As String, bytMove As Byte
strPasswordTow = "XYZABCDEFGHIJKLMNOPQRSTUVWXYZxyzabcdefghijklmnopqrstuvwxyz"
strDecrypt = txtBefore.Text '//获取文本
lngDecrypt = Len(strDecrypt) '//获取要转换的字符个数
For lngTime = 1 To lngDecrypt '//使用For遍历读取每一个字符,合法的转换,不合法的保留
strOne = Mid$(strDecrypt, lngTime, 1): bytMove = InStrRev(strPasswordTow, strOne, 58, vbBinaryCompare) '//查找字母的位置
If bytMove <> 0 Then
Mid$(strDecrypt, lngTime, 1) = Mid$(strPasswordTow, bytMove - 3, 1) '//填充转换后的数据
End If
Next
txtAfter.Text = strDecrypt '//显示
Exit Sub
Fal:
MsgBox "密码转换出错,请检查所输入的数据!", vbExclamation '//容错处理
End Sub
Private Sub Form_Initialize()
InitCommonControls
End Sub
Private Sub cmdEncrypt_Click()
If Len(txtBefore.Text) = 0 Then
MsgBox "请输入要加密的原文!", vbExclamation
End If
On Error GoTo Fal
Dim strPasswordOne As String, strEncrypt As String, lngEncrypt As Long, lngTime As Long, strOne As String, bytMove As Byte
strPasswordOne = "abcdefghijklmnopqrstuvwxyzabcABCDEFGHIJKLMNOPQRSTUVWXYZABC"
strEncrypt = txtBefore.Text '//获取文本
lngEncrypt = Len(strEncrypt) '//获取要转换的字符个数
For lngTime = 1 To lngEncrypt '//使用For遍历读取每一个字符,合法的转换,不合法的保留
strOne = Mid$(strEncrypt, lngTime, 1): bytMove = InStr(1, strPasswordOne, strOne, vbBinaryCompare) '//查找字母的位置
If bytMove <> 0 Then
Mid$(strEncrypt, lngTime, 1) = Mid$(strPasswordOne, bytMove + 3, 1) '//填充转换后的数据
End If
Next
txtAfter.Text = strEncrypt '//显示
Exit Sub
Fal:
MsgBox "密码转换出错,请检查所输入的数据!", vbExclamation '//容错处理
End Sub
以上代码在XpSP2+VB6下调试成功。
最后的程序效果入图
图片附件: [效果图] Ceasar.png (2007-1-13 19:18, 27.42 K)
大家可以从后文给出的链接下载文件
附件: [程序] 恺撒密码转换器.rar (2007-1-13 19:18, 8.12 K)
该附件被下载次数 7
PS:由于时代发展的原因,凯萨密码的加密性已经大大降低,所以不宜在重要密码中使用此密码。对于其他的人有更好的方法,本人洗耳恭听!
转载于:https://blog.51cto.com/98318/15681
用VB打造个人版恺撒密码转换器相关推荐
- Python练习:恺撒密码 I
练习:恺撒密码 I 平台:Python123.io 教师:嵩天 描述 凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的 ...
- 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
题目: 恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: 原文:A B C D ...
- python练习——恺撒密码 I
恺撒密码 I 描述 凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: 原文:A ...
- python练习题15:恺撒密码 I
恺撒密码 I 描述 凯撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: 原文:A ...
- 恺撒密码python代码
恺撒密码python代码 小白自己随便写的,最笨的办法 问题: 恺撒密码 ...
- Python基础编程入门实例:恺撒密码
文章目录 Python基础编程入门实例:恺撒密码 一.什么是恺撒密码 二.程序运行环境 三.恺撒密码:加密 3.1.恺撒密码加密实例程序 3.2.恺撒密码加密实例程序运行结果 四.恺撒密码:解密 4. ...
- 恺撒密码(Python练习)
恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下: ...
- 【JS】设计并实现“恺撒密码”
问题描述 移位数N=3和7时,分别加密并恢复一段文字,例如"Peace and Love". 要求:(不)区分大小写,但能识别空格.标点: 恺撒密码是古罗马时代经常使用的一种经典加 ...
- 恺撒密码加解密程序(Python)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.确定恺撒密码原理,用公式表示 二.子函数的确立 1.加密部分 2.解密部分 3.选择加密还是解密 三.确定各个子函 ...
- python恺撒密码 B
恺撒密码 B ...
最新文章
- SharpWebMail介绍和安装(转)
- oracle学习笔记(一)------oracle基础知识和基本sql语句
- 鸿蒙可胜安卓,【鸿蒙币谈】币圈投资中八大见顶信号,让你抓住最佳买卖机会!...
- CodeForces - 1321D Navigation S.ystem(最短路+思维)
- 郭明錤:全新设计AirPods Pro2将于2022年末推出
- python向lt新增5个元素_Python学习第十一课-MOOC嵩天
- sdk版本过低怎么办_区块链中的“块”是什么?区块链网络拥堵怎么办?-Gemini双子新约...
- 学习Mysql (一)
- python一对一参数_Python数值操作1
- linux用户配额管理,—linux 磁盘配额按用户管理(quota)
- ftl有三种映射地址_FTL地址映射的方法及装置与流程
- 网页下载Google Play 的App
- Android 11.0 下拉状态栏通知栏的通知设置默认展开
- 音频格式转换(ffmpeg)
- xampp开启GD2绘图
- CISSP考试的难点到底在哪里
- java -jar 工作原理_Java 中的 jar ,天天见,可是你知道它的运行机制吗?
- oracle pdb还原为no-cdb,12c PDB备份与恢复测试
- iptables日志管理
- 云呐:固定资产核算系统包括哪些功能