Dobrý den,
dostal jsem se myšlenkově do úzkých a prosím o radu.
Součástí našeho software je program pro odesílání e-podání na ČSSZ. S
přechodem na VREP a masivním vyřazováním WinXP dozrála potřeba upravit
aplikaci (což znamená opustit berličku CAPICOM a přejít na čistý .NET).
Změna na VREP je triviální, vygenerovaná XML se mi daří digitálně
podepsat, ale zašifrování ani omylem. Zkoušel jsem 2 varianty:
Public Function CryptFile(ByVal fn As String, ByVal cert As X509Certificate2) As String
Try
Dim tDESkey As New TripleDESCryptoServiceProvider()
tDESkey.Key = cert.GetPublicKey()
tDESkey.Mode = CipherMode.ECB
tDESkey.Padding = PaddingMode.PKCS7
Dim Encryptor As ICryptoTransform = tDESkey.CreateEncryptor()
Return (ConvertByteArrayToString(Encryptor.TransformFinalBlock(eXml, 0, eXml.Length)))
Catch ex As Exception
Return ""
End Try
End Function
Public Function CryptFile(ByVal fn As String, ByVal cert As X509Certificate2) As String
Dim rsacsp As New RSACryptoServiceProvider()
Dim csp As New CryptoConfig
Try
rsacsp = CType(cert.PublicKey.Key, RSACryptoServiceProvider)
Dim bytes() As Byte = FileToBytes(fn)
Dim Crypted() As Byte = rsacsp.Encrypt(bytes, False)
'retString = Convert.ToBase64String(Crypted)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
Elaborováním s parametry i postupy se vždy dostávám k hláškám o
neplatnosti certifikátu DIS.CSSZ.2011 pro toto použití, špatné délce certifikátu (tDESkey.Key = cert.GetPublicKey), nebo o špatné
délce dat ( ICryptoTransform ). Nápady jak vyčíst z certifikátu typ
šifry a použít správný algoritmus došly, podle dokumentace od ČSSZ by to
měla být 3DES.
Pomůže mi někdo s nasměrováním, prosím?