Vb.net playfair密码的编程问题
我的代码有问题Vb.net playfair密码的编程问题,vb.net,encryption,Vb.net,Encryption,我的代码有问题 Public Class Form1 Dim lm(4, 4) As Char Dim pt As String = "" Dim ct As String = "" Dim key As String = "" Dim n1, n2, n3, n4, m1, m2, m3, m4 As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Ha
Public Class Form1
Dim lm(4, 4) As Char
Dim pt As String = ""
Dim ct As String = ""
Dim key As String = ""
Dim n1, n2, n3, n4, m1, m2, m3, m4 As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
key = k.Text
key.Replace(" ", "")
pt = plaintext.Text
If pt.Length Mod 2 <> 0 Then
pt = pt & "e"
End If
pt = UCase(pt)
pt.Replace("J", "I")
Dim Value As String
Dim NewValue As String
key.Replace("J", "I")
Value = key & "ABCDEFGHIKLMNOPQRSTUVWXYZ"
NewValue = ""
Value = UCase(Value)
NewValue = Value(0)
For i As Integer = 1 To Value.Length - 1
If Not (InStr(1, NewValue, Value(i)) > 0) Then
NewValue = NewValue & Value(i)
End If
Next
Dim p As Integer = 0
For n As Integer = 0 To 4
For m As Integer = 0 To 4
lm(n, m) = NewValue(p)
p = p + 1
Next
Next
Dim leave As Boolean = False
For q As Integer = 0 To pt.Length - 1 Step 2
For n1 = 0 To 4
For m1 = 0 To 4
If lm(n1, m1).Equals(pt(q)) Then
leave = True
Exit For
End If
Next
If leave Then
Exit For
End If
Next
leave = False
For n2 = 0 To 4
For m2 = 0 To 4
If lm(n2, m2).Equals(pt(q + 1)) Then
leave = True
Exit For
End If
Next
If leave Then
Exit For
End If
Next
If n1 = n2 Then
If m1 >= 4 Then
m3 = 0
Else
m3 = m1 + 1
End If
If m2 >= 4 Then
m4 = 0
Else
m4 = m2 + 1
End If
ElseIf m1 = m2 Then
If n1 >= 4 Then
n3 = 0
Else
n3 = n1 + 1
End If
If n2 >= 4 Then
n4 = 0
Else
n4 = n2 + 1
End If
Else
n3 = n1
m3 = m2
n4 = n2
m4 = m1
End If
ct = ct & lm(n3, m3) & lm(n4, m4)
Next
ciphertext.Text = ct
ct = ""
End Sub
End Class
公共类表单1
将lm(4,4)作为字符
Dim pt As String=“”
将ct设置为字符串=“”
Dim key As String=“”
尺寸n1、n2、n3、n4、m1、m2、m3、m4为整数
私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
key=k.文本
键。替换(“,”)
pt=纯文本
如果pt.Length Mod 2 0,则
pt=pt&“e”
如果结束
pt=UCase(pt)
部分替换(“J”、“I”)
将值设置为字符串
将NewValue设置为字符串
键。替换(“J”、“I”)
值=键和“ABCDEFGHIKLMNOPQRSTUVXYZ”
NewValue=“”
值=UCase(值)
NewValue=值(0)
对于i,整数=1到值。长度-1
如果不是(InStr(1,NewValue,Value(i))>0),则
NewValue=NewValue&Value(一)
如果结束
下一个
将p调整为整数=0
对于n,作为整数=0到4
对于m,整数=0到4
lm(n,m)=新值(p)
p=p+1
下一个
下一个
将左变暗为布尔值=False
对于q为整数=0到pt.Length-1的步骤2
对于n1=0到4
对于m1=0到4
如果lm(n1,m1).等于(pt(q)),那么
离开=真
退出
如果结束
下一个
如果你离开的话
退出
如果结束
下一个
离开=假
对于n2=0到4
对于m2=0到4
如果lm(n2,m2).等于(pt(q+1)),那么
离开=真
退出
如果结束
下一个
如果你离开的话
退出
如果结束
下一个
如果n1=n2,则
如果m1>=4,则
m3=0
其他的
m3=m1+1
如果结束
如果m2>=4,则
m4=0
其他的
m4=m2+1
如果结束
ElseIf m1=m2,则
如果n1>=4,则
n3=0
其他的
n3=n1+1
如果结束
如果n2>=4,则
n4=0
其他的
n4=n2+1
如果结束
其他的
n3=n1
m3=m2
n4=n2
m4=m1
如果结束
ct=ct和lm(n3,m3)和lm(n4,m4)
下一个
密文文本=ct
ct=“”
端接头
末级
它给出了该行中的错误ct=ct&lm(n3,m3)和lm(n4,m4)阵列超出范围
我不知道为什么有人能帮我?啊,斑点:)
在第一次迭代之前将其设置为false,在循环内部(q+1)之前将其设置为false
每次循环时,需要重置leave=False
:
Dim leave As Boolean
For q As Integer = 0 To pt.Length - 1 Step 2
leave = False ' This was missing
For n1 = 0 To 4
啊,斑点:)
在第一次迭代之前将其设置为false,在循环内部(q+1)之前将其设置为false
每次循环时,需要重置leave=False
:
Dim leave As Boolean
For q As Integer = 0 To pt.Length - 1 Step 2
leave = False ' This was missing
For n1 = 0 To 4
要获得较短的代码,请尝试:
(a,b,f,g,c)="".join(input("CODE: ").split()),input("Polybius S: "),"","",1
for(i)in(a):
if(c%2)==0:
g+=i
else:
f+=i
c+=1
for(j)in(range(0,len(f))):
if(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+(b.find(g[j])%5)],end="")
print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+(b.find(f[j])%5)],end="")
elif(b.find(f[j])%5)==(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((((int(((b.find(f[j]))-(b.find(f[j])%5))/5))-1)%5)*5)+b.find(f[j])%5],end="")
print(b[((((int(((b.find(g[j]))-(b.find(g[j])%5))/5))-1)%5)*5)+b.find(g[j])%5],end="")
elif(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))==(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+((b.find(f[j])%5)-1)%5],end="")
print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+((b.find(g[j])%5)-1)%5],end="")
好吧,也许没那么短。或简单的要获得较短的代码,请尝试:
(a,b,f,g,c)="".join(input("CODE: ").split()),input("Polybius S: "),"","",1
for(i)in(a):
if(c%2)==0:
g+=i
else:
f+=i
c+=1
for(j)in(range(0,len(f))):
if(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+(b.find(g[j])%5)],end="")
print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+(b.find(f[j])%5)],end="")
elif(b.find(f[j])%5)==(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))!=(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((((int(((b.find(f[j]))-(b.find(f[j])%5))/5))-1)%5)*5)+b.find(f[j])%5],end="")
print(b[((((int(((b.find(g[j]))-(b.find(g[j])%5))/5))-1)%5)*5)+b.find(g[j])%5],end="")
elif(b.find(f[j])%5)!=(b.find(g[j])%5)and(int(((b.find(f[j]))-(b.find(f[j])%5))/5))==(int(((b.find(g[j]))-(b.find(g[j])%5))/5)):
print(b[((int(((b.find(f[j]))-(b.find(f[j])%5))/5))*5)+((b.find(f[j])%5)-1)%5],end="")
print(b[((int(((b.find(g[j]))-(b.find(g[j])%5))/5))*5)+((b.find(g[j])%5)-1)%5],end="")
好吧,也许没那么短。或者简单您可以使用调试器检查变量吗?哪一个超出范围?纯文本:sara键:计算机m4变为5您可以使用调试器检查变量吗?哪个超出范围?纯文本:sara键:计算机m4变为5