Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net playfair密码的编程问题_Vb.net_Encryption - Fatal编程技术网

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