⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c.frm

📁 adfgx密表密码
💻 FRM
字号:
VERSION 5.00
Begin VB.Form C 
   Caption         =   "ADFGX密表密码"
   ClientHeight    =   6810
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   6900
   LinkTopic       =   "Form1"
   ScaleHeight     =   6810
   ScaleWidth      =   6900
   StartUpPosition =   2  'CenterScreen
   Begin VB.CommandButton Command2 
      Caption         =   "置换加密"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   5400
      TabIndex        =   9
      Top             =   1800
      Width           =   1335
   End
   Begin VB.CommandButton Command5 
      Caption         =   "重新操作"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   5400
      TabIndex        =   8
      Top             =   5640
      Width           =   1335
   End
   Begin VB.CommandButton Command4 
      Caption         =   "清除明文"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   480
      TabIndex        =   7
      Top             =   2760
      Width           =   1215
   End
   Begin VB.CommandButton Command3 
      Caption         =   "解密"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   5400
      TabIndex        =   6
      Top             =   4680
      Width           =   1335
   End
   Begin VB.TextBox Text2 
      BackColor       =   &H8000000F&
      Enabled         =   0   'False
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H00000000&
      Height          =   1575
      Left            =   360
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   5
      Top             =   4680
      Width           =   4455
   End
   Begin VB.CommandButton Command6 
      Caption         =   "退出"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   2880
      TabIndex        =   3
      Top             =   2760
      Width           =   1215
   End
   Begin VB.CommandButton Command1 
      Caption         =   "替代加密"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   12
         Charset         =   0
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   615
      Left            =   5400
      TabIndex        =   2
      Top             =   840
      Width           =   1335
   End
   Begin VB.TextBox Text1 
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   14.25
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   1575
      Left            =   360
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   1
      Top             =   840
      Width           =   4455
   End
   Begin VB.Line Line1 
      BorderWidth     =   2
      X1              =   240
      X2              =   6720
      Y1              =   3720
      Y2              =   3720
   End
   Begin VB.Label Label2 
      Caption         =   "输出密文:"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   15
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   360
      TabIndex        =   4
      Top             =   4080
      Width           =   1455
   End
   Begin VB.Label Label1 
      AutoSize        =   -1  'True
      Caption         =   "输入明文:"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   15
         Charset         =   134
         Weight          =   700
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   300
      Left            =   360
      TabIndex        =   0
      Top             =   360
      Width           =   1575
   End
End
Attribute VB_Name = "C"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Rem 这是ADFGX密表加密算法
Option Explicit

Dim seq(4) As Integer, j, k
Dim a(1 To 5, 1 To 5), b(1 To 5) As String

Private Sub Command1_Click()
Rem 替代加密

Dim Str1 As String, Str2 As String, ch As String
Dim strlen As Integer, i As Integer

b(1) = "A": b(2) = "D": b(3) = "F": b(4) = "G": b(5) = "X"

a(1, 1) = "n": a(1, 2) = "b": a(1, 3) = "x": a(1, 4) = "r": a(1, 5) = "u"
a(2, 1) = "q": a(2, 2) = "o": a(2, 3) = "k": a(2, 4) = "d": a(2, 5) = "v"
a(3, 1) = "a": a(3, 2) = "h": a(3, 3) = "s": a(3, 4) = "g": a(3, 5) = "f"
a(4, 1) = "m": a(4, 2) = "z": a(4, 3) = "c": a(4, 4) = "l": a(4, 5) = "t"
a(5, 1) = "e": a(5, 2) = "i": a(5, 3) = "p": a(5, 4) = "j": a(5, 5) = "w"
Str1 = Trim(Text1.Text)
Rem 将输入文本框的字符串的前后空格去掉后赋值给Str1

strlen = Len(Str1)
Rem 求字符串的长度

i = 1
Do While i <= strlen

ch = Mid(Str1, i, 1)

   If Asc(ch) = 32 Or Asc(ch) = 13 Then
   i = i + 1
   Rem 如果该字符为空格或回车,则考虑下一个字符

   ElseIf ch >= "a" And ch <= "z" And ch <> "y" Then
     For j = 1 To 5
       For k = 1 To 5
        If ch = a(j, k) Then
        ch = b(j) & b(k)
        End If
       Next k
     Next j
   Str2 = Str2 & ch
   i = i + 1
   Rem 该字符合法,则按规则进行替换,若该字符与a(j,k)相等,则用字符对b(j)b(k)替换
   Else
   MsgBox "你输入了非法字符,请重新输入!" & Chr(13) & "注意:输入字符的范围为26个小写英文字符且不含'y'!", vbOKOnly, "警告"
   Exit Do

   End If

Loop

Text2.Text = Str2

End Sub

Private Sub Command2_Click()
Rem 置换加密

Dim Str1(49, 4) As String, Str2 As String, Str3 As String, method As String, b(4) As String
Dim strlen As Integer, i, row, col As Integer, rowmax, flag As Integer

flag = 1
method = InputBox("请输入1——5的数字乱序作为置换密码的规则,即输入一个1——5的排列:", "输入规则", "12345")
i = 0
Do While i < 5
b(i) = Mid(method, i + 1, 1)
seq(i) = Val(b(i))
If seq(i) < 1 Or seq(i) > 5 Then
flag = 0
End If
i = i + 1
Loop
 
If flag = 0 Then
MsgBox "你输入的乱序规则不合要求,请重新选择'置换加密'!" & Chr(13) & "注意:规则应是1——5的一个排列!", vbOKOnly, "警告"
Rem 判断输入的规则是否合理,即输入的应是1——5的一个排列
  
Else
Str2 = Text2.Text
i = 0
 Do While i <= Len(Str2)
 row = i \ 5: rowmax = row
 col = i Mod 5: col = seq(col) - 1
 Rem imod5后得到的列数应变换为实际的列,它们的变换关系为col=seq(col)-1
 Str1(row, col) = Mid(Str2, i + 1, 1)
 i = i + 1
 Loop
 Rem 将替换解密后得到的字符串依次存入一个n*5的数组Str1(49,4)
 
 For col = 0 To 4
   For row = 0 To rowmax
     If Str1(row, col) <> "" Then
     Str3 = Str3 & Str1(row, col)
     End If
   
   Next row
 Next col
 Rem 将数组Str1(49,4)按实际的列序排列存入字符串Str3
 
 Text2.Text = Str3

End If

End Sub

Private Sub Command3_Click()
Rem 解密

Text1.BackColor = &H8000000F
Dim Str1 As String, Str2 As String, Str3, Astr(1 To 50, 1 To 5), ch As String
Dim strlen, i, chx, row, rowmax, rowc(1 To 5), col, p, flag(1 To 5) As Integer

Str2 = Trim(Text2.Text)
strlen = Len(Str2)
p = strlen Mod 5

  For i = 1 To p
  flag(i) = 1
  Next i
 
  Rem 若余数为p,则这p列的最大行数比另外5-p的行数大1,这几列的标志位为1
  rowmax = strlen \ 5
  For i = 1 To 5
  rowc(seq(i - 1)) = rowmax + flag(i)
  Next i
  Rem 每一列的行数为rowc(col),乱序列转换为实际列:col=seq(col-1)

  i = 1
     For col = 1 To 5
        For row = 1 To rowc(col)
        Astr(row, col) = Mid(Str2, i, 1)
        i = i + 1
        Next row
     Next col
     Rem 将密文字符串按列序存入数组
  
  For row = 1 To strlen \ 5 + 1
     For col = 1 To 5
       If Astr(row, seq(col - 1)) <> "" Then
       Str1 = Str1 & Astr(row, seq(col - 1))
       End If
     Next col
  Next row
  Rem 乱序排列后,按行序赋值给Str1
  
  i = 1
  Do While i <= Len(Str1)
     For j = 1 To 5
       If b(j) = Mid(Str1, i, 1) Then
       row = j
       End If
     Next j
    
     i = i + 1
     For k = 1 To 5
       If b(k) = Mid(Str1, i, 1) Then
       col = k
       End If
     Next k
     i = i + 1
   Rem 查ADFGX密表,找出每两个密文字符对应的明文
   Str3 = Str3 & a(row, col)
    Loop
  Text1.Text = Str3
End Sub

Private Sub Command4_Click()
Text1.Text = ""

End Sub

Private Sub Command5_Click()
Text1.Text = ""
Text2.Text = ""
Text1.BackColor = &H80000005

End Sub

Private Sub Command6_Click()
End

End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -