2012-04-18 2 views
-2
Public Shared Function EncryptRSA(ByVal infilename As String, ByVal outfilename As String, ByVal pubkey As String) As String 
     Dim buffer2 As Byte() 
     Dim buffer3 As Byte() 
     Dim provider As New RSACryptoServiceProvider 
     provider.FromXmlString(File.ReadAllText(pubkey)) 
     Dim sourceArray As Byte() = File.ReadAllBytes(infilename) 
     Dim num As Integer = (sourceArray.Length/&H3A) 
     Dim stream As FileStream = File.Create(outfilename) 
     Dim num2 As Integer = 0 

     For num2 = 0 To num - 1 
      buffer2 = New Byte(&H3A - 1) {} 
      Array.Copy(sourceArray, (num2 * &H3A), buffer2, 0, &H3A) 
      buffer3 = provider.Encrypt(buffer2, True) 
      stream.Write(buffer3, 0, buffer3.Length) 
     Next num2 
     If ((sourceArray.Length Mod &H3A) <> 0) Then 
      buffer2 = New Byte((sourceArray.Length Mod &H3A) - 1) {} 

      Array.Copy(sourceArray, ((sourceArray.Length/&H3A) * &H3A), buffer2, 0, (sourceArray.Length Mod &H3A)) 
      buffer3 = provider.Encrypt(buffer2, True) 
      stream.Write(buffer3, 0, buffer3.Length) 
     End If 
     stream.Close() 
     Return File.ReadAllText(outfilename) 
    End Function 

Ошибка 1 разрешение перегрузки не удалась, поскольку не доступны 'Copy' не может быть вызван без сужающего преобразования: «Public Shared Sub Copy (sourceArray Как System.Array, sourceIndex As Long, destinationArray As System.Array, destinationIndex As Long, length As Long) ': Параметр соответствия аргумента' sourceIndex 'сужается от' Double 'до' Long '. 'Публичная общая копия (sourceArray As System.Array, sourceIndex As Integer, destinationArray As System.Array, destinationIndex As Integer, length As Integer)': Параметр соответствия аргумента 'sourceIndex' сужается от 'Double' до 'Integer'. C: \ Users \ пользователь \ AppData \ Local \ Временные проекты \ WindowsApplication1 \ Crypto.vb 52 13 WindowsApplication1метод Array.Copy в vb.net

+0

Это не сбой. Это ошибка компиляции. –

ответ

0

У вас есть эта строка:

Array.Copy(sourceArray, ((sourceArray.Length/&H3A) * &H3A), buffer2, 0, (sourceArray.Length Mod &H3A)) 

Что компилятор хочет сказать вам, что вы предусмотрен двойное значение для sourceIndex, но оно ожидало долгое значение. double нельзя отбрасывать до конца неявно, потому что long не может представлять все возможные значения double.

Так что преобразование явно:

Array.Copy(sourceArray, CLng((sourceArray.Length/&H3A) * &H3A), buffer2, 0, (sourceArray.Length Mod &H3A)) 
Смежные вопросы