将整数转换为字节数组在VB.NET中不起作用?

将整数转换为字节数组在VB.NET中不起作用?,vb.net,Vb.net,所以我在做一个程序,在这个程序中我处理的是非常大的整数。为此,我想使用。这有时似乎有效,但当我遇到足够大的值时(这很常见),它就会崩溃 我在我的程序中使用了两次这个想法,这是我的第一次尝试,有时会奏效: 'encrypt For i As Integer = 0 To IntegerList.Count() - 1 'create a Byte Array for the exponentiation Dim Byt

所以我在做一个程序,在这个程序中我处理的是非常大的整数。为此,我想使用。这有时似乎有效,但当我遇到足够大的值时(这很常见),它就会崩溃

我在我的程序中使用了两次这个想法,这是我的第一次尝试,有时会奏效:

        'encrypt
        For i As Integer = 0 To IntegerList.Count() - 1
            'create a Byte Array for the exponentiation
            Dim ByteList As Byte() = BitConverter.GetBytes(IntegerList(i) ^ eInteger)

            'create a BigInteger using ByteList
            Dim ExpInt = New BigInteger(ByteList)

            'do mod operation
            Dim ModInteger As Integer = ExpInt Mod nInteger

            'add to list
            IntegerList(i) = ModInteger
        Next
然而,正如我所说的,我认为当数字足够大时,这种情况就会发生。例如,这里是72^13:

我觉得这没问题,但有点奇怪。然而,当东西变得足够大时,比如在72^967中,我会得到:

这是我在代码中的第二次尝试,但这永远不起作用,因为数字比第一次尝试大得多:

        'decrypt string
        Dim ByteList As Byte() = BitConverter.GetBytes(EncryptedInteger ^ dInteger)
        Dim EncryptedBigInteger = New BigInteger(ByteList)

        Dim ExpInteger = New BigInteger(ByteList)

        Dim ModInteger As Integer = EncryptedBigInteger Mod nInteger

        DecryptIntListBox.Items.Add(ModInteger)
以下是我尝试过的两种选择,但^operator不适用于BigInteger:

这会很方便

        'decrypt string
        Dim EncryptByteList As Byte() = BitConverter.GetBytes(EncryptedInteger)
        Dim dByteList As Byte() = BitConverter.GetBytes(dInteger)

        Dim EncryptedBigInteger = New BigInteger(EncryptByteList)
        Dim dBigInteger = New BigInteger(dByteList)

        EncryptedBigInteger = EncryptedBigInteger ^ dBigInteger

        Dim ModInteger As Integer = EncryptedBigInteger Mod nInteger

        DecryptIntListBox.Items.Add(ModInteger)
这好像是什么。我可以循环
EncryptedBigInteger=EncryptedBigInteger*EncryptedInteger
dInteger次吗?手术会成功的,我只是不知道我会不会弄坏什么东西

        'decrypt string
        Dim EncryptByteList As Byte() = BitConverter.GetBytes(EncryptedInteger)

        Dim EncryptedBigInteger = New BigInteger(EncryptByteList)

        EncryptedBigInteger = EncryptedBigInteger ^ dInteger

        Dim ModInteger As Integer = EncryptedBigInteger Mod nInteger

        DecryptIntListBox.Items.Add(ModInteger)
那么,我怎样才能让这一切顺利进行呢?我知道BigInteger可以保存我需要的数字,但我似乎无法将它们带进课堂。根据我的研究,使用字节数组是最符合逻辑的方法

在上下文中,我编写的代码给出了一个RSA加密/解密示例,并展示了该过程

编辑:

我尝试了
EncryptedBigInteger=EncryptedBigInteger*EncryptedInteger
方法,但出现以下错误:

System.InvalidCastException: 'Specified cast is not valid.'

据我所知,通过这样做,我已经实现了我所需要的:

        'create byte array
        Dim EncryptedByteList As Byte() = BitConverter.GetBytes(EncryptedInteger)

        'create BigInts
        Dim EncryptedBigInteger = New BigInteger(EncryptedByteList)
        Dim StaticEncryptedBigInteger = New BigInteger(EncryptedByteList)

        'calculate EncryptedInteger ^ dInteger
        For i As Integer = 1 To dInteger - 1
            EncryptedBigInteger *= StaticEncryptedBigInteger
        Next

        'do mod operation
        Dim ModInteger As Integer = EncryptedBigInteger Mod nInteger

        'output
        DecryptIntListBox.Items.Add(ModInteger)

如果有更好的方法,仍然可以接受建议。

请将实际代码作为文本而不是图像发布,这在和中有介绍。@Jeremythonpson修复了您的两个示例72^13和72^967不是整数。72^13可以用双精度表示,72^967不能。是否使用
encyptedbiginger^dInteger
完全取决于VB编译器如何处理VB求幂运算符。理想情况下,它会认识到有一个共享的
Pow
,它在
biginger
上运行,并编译为对该函数的调用(类似于我希望操作符处理内置类型的方式),但我不确定实际情况是否如此。与VB不同,文明程度较低的.NET语言(最著名的是C#)不将求幂作为内置运算符。