Прежде всего, если я делаю шифрование и дешифрование на одном компьютере, он работает нормально. Но когда я хочу расшифровать файл, зашифрованный на другом компьютере с тем же ключом, он не работает. Ошибка говорит «Параметр неверен». Вот определения:
Dim cspp As New CspParameters
Dim rsa As New RSACryptoServiceProvider
Dim bVis As New baseVisitor
Dim encDec As New EncryptDecrypt
Public encFolder As String = ""
Public decFolder As String = ""
Public keyName As String = ""
Вот как я могу определить ключ;
Public Function GetKey() As Boolean
Dim sonuc As Boolean = False
Try
keyName = "keyName25*-"
If keyName.Length > 4 Then
cspp.KeyContainerName = keyName
rsa = New RSACryptoServiceProvider(cspp)
rsa.PersistKeyInCsp = True
sonuc = True
End If
Catch ex As Exception
sonuc = False
End Try
Return sonuc
End Function
После получения ключа вот код шифрования;
Public Sub EncryptFile(ByVal decFile As String)
Dim rjndl As RijndaelManaged = New RijndaelManaged()
rjndl.KeySize = 256
rjndl.BlockSize = 256
rjndl.Mode = CipherMode.CBC
Dim transform As ICryptoTransform = rjndl.CreateEncryptor()
Dim keyEncrypted As Byte() = rsa.Encrypt(rjndl.Key, False)
Dim LenK As Byte() = New Byte(3) {}
Dim LenIV As Byte() = New Byte(3) {}
Dim lKey As Integer = keyEncrypted.Length
LenK = BitConverter.GetBytes(lKey)
Dim lIV As Integer = rjndl.IV.Length
LenIV = BitConverter.GetBytes(lIV)
Dim startFileName As Integer = decFile.LastIndexOf("\") + 1
Dim outFile As String = decFile
Using outFs As FileStream = New FileStream(outFile, FileMode.Create)
outFs.Write(LenK, 0, 4)
outFs.Write(LenIV, 0, 4)
outFs.Write(keyEncrypted, 0, lKey)
outFs.Write(rjndl.IV, 0, lIV)
Using outStreamEncrypted As CryptoStream = New CryptoStream(outFs, transform, CryptoStreamMode.Write)
Dim count As Integer = 0
Dim offset As Integer = 0
Dim blockSizeBytes As Integer = rjndl.BlockSize / 8
Dim data As Byte() = New Byte(blockSizeBytes - 1) {}
Dim bytesRead As Integer = 0
Using inFs As FileStream = New FileStream(decFile, FileMode.Open)
Do
count = inFs.Read(data, 0, blockSizeBytes)
offset += count
outStreamEncrypted.Write(data, 0, count)
bytesRead += blockSizeBytes
Loop While count > 0
inFs.Close()
End Using
outStreamEncrypted.FlushFinalBlock()
outStreamEncrypted.Close()
End Using
outFs.Close()
End Using
End Sub
Шифрование работает на всех компьютерах. Но код описания, который находится ниже, является проблемой:
Public Sub DecryptFile(ByVal enFile As String)
Dim rjndl As RijndaelManaged = New RijndaelManaged()
rjndl.KeySize = 256
rjndl.BlockSize = 256
rjndl.Mode = CipherMode.CBC
Dim LenK As Byte() = New Byte(3) {}
Dim LenIV As Byte() = New Byte(3) {}
Dim outFile As String = enFile
Using inFs As FileStream = New FileStream(enFile, FileMode.Open)
inFs.Seek(0, SeekOrigin.Begin)
inFs.Seek(0, SeekOrigin.Begin)
inFs.Read(LenK, 0, 3)
inFs.Seek(4, SeekOrigin.Begin)
inFs.Read(LenIV, 0, 3)
Dim lenK32 As Integer = BitConverter.ToInt32(LenK, 0)
Dim lenIV32 As Integer = BitConverter.ToInt32(LenIV, 0)
Dim startC As Integer = lenK32 + lenIV32 + 8
Dim lenC As Integer = CInt(inFs.Length) - startC
Dim KeyEncrypted As Byte() = New Byte(lenK32 - 1) {}
Dim IV As Byte() = New Byte(lenIV32 - 1) {}
inFs.Seek(8, SeekOrigin.Begin)
inFs.Read(KeyEncrypted, 0, lenK32)
inFs.Seek(8 + lenK32, SeekOrigin.Begin)
inFs.Read(IV, 0, lenIV32)
Dim KeyDecrypted As Byte() = rsa.Decrypt(KeyEncrypted, False)
Dim transform As ICryptoTransform = rjndl.CreateDecryptor(KeyDecrypted, IV)
Using outFs As FileStream = New FileStream(outFile, FileMode.Create)
Dim count As Integer = 0
Dim offset As Integer = 0
Dim blockSizeBytes As Integer = rjndl.BlockSize / 8
Dim data As Byte() = New Byte(blockSizeBytes - 1) {}
inFs.Seek(startC, SeekOrigin.Begin)
Using outStreamDecrypted As CryptoStream = New CryptoStream(outFs, transform, CryptoStreamMode.Write)
Do
count = inFs.Read(data, 0, blockSizeBytes)
offset += count
outStreamDecrypted.Write(data, 0, count)
Loop While count > 0
outStreamDecrypted.FlushFinalBlock()
outStreamDecrypted.Close()
End Using
outFs.Close()
End Using
inFs.Close()
End Using
End Sub
Использование одного и того же ключа должно решить проблему, но это ошибка все время. Я искал везде. Кто-нибудь может мне помочь?
ПРИМЕЧАНИЕ: я просто хочу зашифровать-расшифровать файлы jpg