没有启瓶器怎么开红酒:凯撒密码用VB如何编写程序

来源:百度文库 编辑:中科新闻网 时间:2024/05/02 20:33:45
凯撒密码的原理是将“明文”中的每个字母用另外一个字母替换,这样就形成
“密文”。已知凯撒密码的计算公式为F(a)=(a+k) Mod n,k=3,n=26,如果将英文字
母进行加密,其对应关系如下所示:
明文:A B C D E F …… X Y Z
密文:D E F G H I …… A B C
将字符串“PROGRAM”加密

这个很简单嘛,用ASC 和 CHR 转换一下嘛
打开Vb,添加2个label控件,2个text控件 1个command按钮

代码如下:
Private Function f(ByVal a As String, k As Integer, n As Integer) As String
If ((Asc(a) >= 65 And Asc(a) <= 97) Or (Asc(a) >= 97 And Asc(a) <= 122)) And Len(a) = 1 Then '判断是否为一个字母
'利用公式计算
If Asc(a) >= 65 And Asc(a) <= 97 Then f = Chr((Asc(a) - 64 + k) Mod n + 64) '当为大写的时候
If Asc(a) >= 97 And Asc(a) <= 122 Then f = Chr((Asc(a) - 96 + k) Mod n + 96) '当为小写的时候
Else
f = "error" '若不满足要求,则返回错误
End If
End Function

Private Sub Command1_Click()
Dim strold As String
Dim strnew As String
Dim k As Integer
Dim n As Integer
Dim i As Long
Dim tmp As String
k = 3
n = 26
strold = Text1.Text '要加密的字符串

For i = 1 To Len(strold)
tmp = Mid(strold, i, 1)
tmp = f(tmp, k, n)
If tmp <> "error" Then
strnew = strnew + tmp
Else
MsgBox "字符串中含有非法字符"
Exit Sub
End If
Next i
Text2.Text = strnew
End Sub

Private Sub Form_Load()
Text1.Text = "PROGRAM"
Text2.Text = ""
Command1.Caption = "加密"
Label1.Caption = "源字符串:"
Label2.Caption = "加密字符串:"
End Sub

Public Function KSPW(ByVal InStrs As String, ByVal Mk As Integer)
\'调用格式:KSPW 待加密字符串,偏移位数
\'待加密字符串只能是26个字母
Dim k As Integer, n As Integer, InChrlen As Integer, i As Integer
Dim tmpStr As String, OutStr As String, PWSL As String, tmpPWL As String
Dim ChrAsc As Integer
n = 26
OutStr = \"\"
tmpPWL = \"\"
InChrlen = Len(InStrs)
If InChrlen = 0 Or Mk > 26 Then
KSPW = \"\"
Exit Function
End If
PWSL = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"
For i = 1 To 26 \'建立密码表
tmpStr = Mid(PWSL, i, 1)
If i > n - Mk Then
tmpPWL = tmpPWL & Chr(Asc(tmpStr) - (26 - Mk))
Else
tmpPWL = tmpPWL & Chr(Asc(tmpStr) + Mk)
End If
Next i

For i = 1 To InChrlen \'加密输入的字符串
tmpStr = Mid(InStrs, i, 1)
If Asc(tmpStr) > 90 Then \'区分大小写
OutStr = OutStr & LCase(Mid(tmpPWL, InStr(1, PWSL, UCase(tmpStr)), 1))
Else
OutStr = OutStr & Mid(tmpPWL, InStr(1, PWSL, tmpStr), 1)
End If

Next i

KSPW = OutStr
End Function
结果:偏移3位时PROGRAM对应的密文是SURJUDP

在窗体上放置2个TextBox和一个CommandButton

然后写如下代码即可:

Function ChangeChar(ByVal AChar As String) As String
Dim CASC As Integer
CASC = Asc(AChar)
CASC = (CASC + 3) Mod 26 + 52
ChangeChar = Chr(CASC)
End Function
Function Encode(ByVal AString As String) As String
Dim i As Integer
Dim Result As String
Result = ""
For i = 1 To Len(AString)
Result = Result + ChangeChar(Mid(AString, i, 1))
Next i
Encode = Result
End Function

Private Sub Command1_Click()
Text2.Text = Encode(Text1.Text)
End Sub

你的题中少了一个常数,所以大家才都答不上来
CASC = (CASC + 3) Mod 26 + 52
这句代码中的+52很关键,需要自己把它算出来

PROGRAM加密后是9;8J;D6