【发布时间】:2020-04-02 12:20:29
【问题描述】:
我正在尝试使用锯齿状数组来构建 AES 加密工具。这纯粹是为了帮助我了解加密的数学原理,而不是为了任何实际应用。我尝试使用 2D 数组,但无法弄清楚如何正确地遍历它们;所以我研究了锯齿状数组。我可以声明和初始化数据不变且不会改变的那些;但我也尝试遍历一个以向其中添加数据,但是在尝试添加到锯齿状数组时出现错误“对象引用未设置为对象的实例”。这是我的代码
Imports System.Text
Public Class Form1
Dim sBox()() As String = {({"63", "7C", "77", "7B", "F2", "6B", "6F", "C5", "30", "01", "67", "2B", "FE", "D7", "AB", "76"}),
({"CA", "82", "C9", "7D", "FA", "59", "47", "F0", "AD", "D4", "A2", "AF", "9C", "A4", "72", "C0"}),
({"B7", "FD", "93", "26", "36", "3F", "F7", "CC", "34", "A5", "E5", "F1", "71", "D8", "31", "15"}),
({"04", "C7", "23", "C3", "18", "96", "05", "9A", "07", "12", "80", "E2", "EB", "27", "B2", "75"}),
({"09", "83", "2C", "1A", "1B", "6E", "5A", "A0", "52", "3B", "D6", "B3", "29", "E3", "2F", "84"}),
({"53", "D1", "00", "ED", "20", "FC", "B1", "5B", "6A", "CB", "BE", "39", "4A", "4C", "58", "CF"}),
({"D0", "EF", "AA", "FB", "43", "4D", "33", "85", "45", "F9", "02", "7F", "50", "3C", "9F", "A8"}),
({"51", "A3", "40", "8F", "92", "9D", "38", "F5", "BC", "B6", "DA", "21", "10", "FF", "F3", "D2"}),
({"CD", "0C", "13", "EC", "5F", "97", "44", "17", "C4", "A7", "7E", "3D", "64", "5D", "19", "73"}),
({"60", "81", "4F", "DC", "22", "2A", "90", "88", "46", "EE", "B8", "14", "DE", "5E", "0B", "DB"}),
({"E0", "32", "3A", "0A", "49", "06", "24", "5C", "C2", "D3", "AC", "62", "91", "95", "E4", "79"}),
({"E7", "C8", "37", "6D", "8D", "D5", "4E", "A9", "6C", "56", "F4", "EA", "65", "7A", "AE", "08"}),
({"BA", "78", "25", "2E", "1C", "A6", "B4", "C6", "E8", "DD", "74", "1F", "4B", "BD", "8B", "8A"}),
({"70", "3E", "B5", "66", "48", "03", "F6", "0E", "61", "35", "57", "B9", "86", "C1", "1D", "9E"}),
({"E1", "F8", "98", "11", "69", "D9", "8E", "94", "9B", "1E", "87", "E9", "CE", "55", "28", "DF"}),
({"8C", "A1", "89", "0D", "BF", "E6", "42", "68", "41", "99", "2D", "0F", "B0", "54", "BB", "16"})}
Dim invSBox()() As String = {({"52", "09", "6A", "D5", "30", "36", "A5", "38", "BF", "40", "A3", "9E", "81", "F3", "D7", "FB"}),
({"7C", "E3", "39", "82", "9B", "2F", "FF", "87", "34", "8E", "43", "44", "C4", "DE", "E9", "CB"}),
({"54", "7B", "94", "32", "A6", "C2", "23", "3D", "EE", "4C", "95", "0B", "42", "FA", "C3", "4E"}),
({"08", "2E", "A1", "66", "28", "D9", "24", "B2", "76", "5B", "A2", "49", "6D", "8B", "D1", "25"}),
({"72", "F8", "F6", "64", "86", "68", "98", "16", "D4", "A4", "5C", "CC", "5D", "65", "B6", "92"}),
({"6C", "70", "48", "50", "FD", "ED", "B9", "DA", "5E", "15", "46", "57", "A7", "8D", "9D", "84"}),
({"90", "D8", "AB", "00", "8C", "BC", "D3", "0A", "F7", "E4", "58", "05", "B8", "B3", "45", "06"}),
({"D0", "2C", "1E", "8F", "CA", "3F", "0F", "02", "C1", "AF", "BD", "03", "01", "13", "8A", "6B"}),
({"3A", "91", "11", "41", "4F", "67", "DC", "EA", "97", "F2", "CF", "CE", "F0", "B4", "E6", "73"}),
({"96", "AC", "74", "22", "E7", "AD", "35", "85", "E2", "F9", "37", "E8", "1C", "75", "DF", "6E"}),
({"47", "F1", "1A", "71", "1D", "29", "C5", "89", "6F", "B7", "62", "0E", "AA", "18", "BE", "1B"}),
({"FC", "56", "3E", "4B", "C6", "D2", "79", "20", "9A", "DB", "C0", "FE", "78", "CD", "5A", "F4"}),
({"1F", "DD", "A8", "33", "88", "07", "C7", "31", "B1", "12", "10", "59", "27", "80", "EC", "5F"}),
({"60", "51", "7F", "A9", "19", "B5", "4A", "0D", "2D", "E5", "7A", "9F", "93", "C9", "9C", "EF"}),
({"A0", "E0", "3B", "4D", "AE", "2A", "F5", "B0", "C8", "EB", "BB", "3C", "83", "53", "99", "61"}),
({"17", "2B", "04", "7E", "BA", "77", "D6", "26", "E1", "69", "14", "63", "55", "21", "0C", "7D"})}
Dim rci()() As String = {({"01", "02", "04", "08", "10", "20", "40", "80", "1B", "36"})}
Dim cipherKey As String
Dim newKey As New StringBuilder
Dim istate()() As String
Dim strVal As String
Dim rnd As New Random
Dim column As Integer
Dim row As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
cipherKey = TextBox1.Text
newKey.Clear()
For i = 0 To 3
For x = 0 To 3
For Each c As Char In cipherKey
strVal = Convert.ToString(Convert.ToInt32(c), 16)
istate(i)(x) = strVal
Next
Next
Next
End Sub
End Class
我在istate(i)(x) = strVal这一行收到错误消息
我很欣赏我的代码可能效率不高,就像我说我只是尝试构建它并对 AES 的每个元素进行编程以更好地了解它的工作原理和数学原理
【问题讨论】:
-
您不能添加到锯齿状数组或任何数组中。数组是固定大小的。您所能做的就是设置已经存在的元素。当然,该行会抛出
NullReferenceException,因为您还没有创建任何数组。没有要设置的元素。首先了解数组的一般工作原理,然后将相同的原理扩展到多维和/或交错数组。 -
如果您需要添加...考虑一个列表列表...如果第一个维度是固定的,则考虑一个列表数组
标签: arrays vb.net visual-studio-2015 aes