Jump to content
xambas

Autoridade Tributária - Documentos de Transporte - Encriptação

Recommended Posts

xambas

Olá malta,

Estou a desenvolver um modulo de comunicação de documentos de transporte em VB.NET, e estou empancado num problema com o qual espero que me possam ajudar.

Então, a situação é a seguinte, eu consigo comunicar com o servidor de testes, no entanto quando invoco o método para o envio, obtenho a seguinte resposta de erro:

"Rejected:   |  Codigo: 16  |  Erro: Created: Chave de sessão inválida. Não foi possível decifrar o campo Created  |  Tentativas Restantes: -1"

Dos testes que fiz, consegui perceber a ordem que eles testam cada um dos campos: Nonce, Created, Password.

Isto quer dizer que, o meu problema pode ser um dos seguintes:

  • chave assimétrica que gero, pode ter problemas (não me parece que seja isto)
  • encriptação da chave assimétrica pode estar errada
  • a string com a data pode estar errada (também nao me parece, já tentei de tudo)
  • a encriptação da string com a data

Segue o meu código:

' GERAÇÃO DE CHAVE ASSIMÉTRICA 
 Public Function GenerateAESKey() As AesKey Implements IEncryptionServices.GenerateAESKey
  	Dim aes As New AesManaged()

  	aes.KeySize = 128
  	aes.BlockSize = 128
  	aes.GenerateKey()
  	aes.GenerateIV()

  	Return New AesKey() With {.IV = aes.IV, .Key = aes.Key}
End Function

' USO ESTA FUNC PARA ENCRIPTAR O NONCE
Public Function EncryptUsingRSA(text As String, certificateFilePath As String, Optional password As String = "") As String Implements IEncryptionServices.EncryptUsingRSA
  	Dim certificate As New X509Certificate2(certificateFilePath, password)

  	Dim csp As RSACryptoServiceProvider = certificate.PublicKey.Key

  	Dim bytesPlainText = Encoding.UTF8.GetBytes(text)
  	Dim encryptedBytesPlainText = csp.Encrypt(bytesPlainText, False)

  	Dim cypherText = Convert.ToBase64String(encryptedBytesPlainText)

  	Return cypherText
End Function
  
' USO ESTA FUNC PARA ENCRIPTAR A PASSWORD E A DATA
Public Function EncryptUsingAES(text As String, key As AesKey) As String Implements IEncryptionServices.EncryptUsingAES
            If text Is Nothing OrElse text.Length <= 0 Then
                Throw New ArgumentNullException(NameOf(text))
            End If

            If key Is Nothing Then
                Throw New ArgumentNullException(NameOf(key))
            End If

            If key.Key Is Nothing OrElse key.Key.Length <= 0 Then
                Throw New ArgumentNullException(NameOf(key.Key))
            End If

            If key.IV Is Nothing OrElse key.IV.Length <= 0 Then
                Throw New ArgumentNullException(NameOf(key.IV))
            End If

            Dim aesManaged As New AesManaged()
            aesManaged.Key = key.Key
            aesManaged.IV = key.IV
            aesManaged.BlockSize = 128
            aesManaged.Mode = CipherMode.ECB
            aesManaged.Padding = PaddingMode.PKCS7

            Dim encryptor As ICryptoTransform = aesManaged.CreateEncryptor(aesManaged.Key, aesManaged.IV)
            Dim memoryStream As New MemoryStream()
            Dim cryptoSream As New CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write)
            Dim streamWriter As New StreamWriter(cryptoSream)

            streamWriter.Write(text)

            streamWriter.Close()
            cryptoSream.Close()
            memoryStream.Close()

            Dim encrypted As Byte() = memoryStream.ToArray()

            Return Convert.ToBase64String(encrypted)
End Function

  

 

Sim, o camiho do certificado está correcto.

Sim, o certificado está actualizado.

Sim, já verifiquei o formato da data e comparei com a OAL.

Já tentei de tudo, estou sem ideias...

Por favor ajudem!

Obrigado!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.