Criptografia em java (RijndaelEnhanced)

Bom dia a todos.

Espero que me possam ajudar pois ja estou a dar em doido com isto.

Passo a explicar a situação.

Tenho todas as passwords encriptadas na base de dados utilizando RijndaelEnhanced.

O exemplo utilizado para o desenvolvimento foi o seguinte:
http://www.obviex.com/samples/EncryptionWithSalt.aspx

A minha DLL foi desenvolvida em VB.NET.

Até aqui tudo bem.

Neste momento estou a desenvolver um projecto em java (o que não é muito favoravel para mim pois não programo em java há mais de 5 anos :oops: )

Qual o caminho a seguir para poder desencriptar as passwords tendo em conta que estas foram encriptadas utilizando o RijndaelEnhanced. Claro que a passPhrase e initVector são diferentes :lol:.

Obrigado.

Você precisa implementar o tal código original em C# em Java. É melhor portá-lo completamente.

Você vai ter uma dificuldade adicional, porque você também precisa implementar PasswordDeriveBytes (que não sei qual o algoritmo usado - essa é uma classe do .NET ou do artigo?

Veja se ele usa AES-128 ou AES-256 (isso só dá para saber contando quantos byter retorna PasswordDeriveBytes). Se for até 128 bits (8 bytes) então você não precisa modificar sua instalação do JDK/JRE. Se for mais que 128 bits, você precisa modificar dois arquivos (local_policy.jar e US_export_policy.jar) que estão em jre\lib\security na sua instalação do JRE ou JDK.

Vai dar trabalho …

O project de encriptação tem apenas duas classes.

RijndaelEnhanced.vb:
-que contem o código exactamente igual ao do artigo(em VB.NET).

e

outra classe que contem o seguinte:


Private passPhrase As String = "Pas5pr@se"        ' Estas são as strings que estão no artigo 
Private initVector As String = "@1B2c3D4e5F6g7H8" ' Estas são as strings que estão no artigo 


Function Encrypt(ByVal str As String) As Boolean

        Dim encryptedData As String
        Dim rijndaelEncryptKey As RijndaelEnhanced

        If String.IsNullOrEmpty(str) Then
             Return False
        End If

        rijndaelEncryptKey = New RijndaelEnhanced(passPhrase, initVector)

        Try
            encryptedData = rijndaelEncryptKey.Encrypt(str)
         Catch ex As Exception
             Return False
        End Try

        Return True

    End Function

    ''' <summary>
    ''' String Decryption
    ''' </summary>
    ''' <param name="str"></param>
     ''' <remarks></remarks>
    Function Decrypt(ByVal str As String) As Boolean

        Dim rijndaelEncryptKey As RijndaelEnhanced
        Dim decryptedData As String

        If String.IsNullOrEmpty(str) Then
            Return False
        End If

        rijndaelEncryptKey = New RijndaelEnhanced(passPhrase, initVector)

        Try
            decryptedData = rijndaelEncryptKey.Decrypt(str)
        Catch ex As Exception
            Return False
        End Try

        Return True

    End Function

Julgo que o problema está em passar a classe RijndaelEnhanced.vb para java :roll: . O que eu não faço a minima ideia como fazer :oops:

Obrigado.

[quote=thingol]Você precisa implementar o tal código original em C# em Java. É melhor portá-lo completamente.

Você vai ter uma dificuldade adicional, porque você também precisa implementar PasswordDeriveBytes (que não sei qual o algoritmo usado - essa é uma classe do .NET ou do artigo?

Veja se ele usa AES-128 ou AES-256 (isso só dá para saber contando quantos byter retorna PasswordDeriveBytes). Se for até 128 bits (8 bytes) então você não precisa modificar sua instalação do JDK/JRE. Se for mais que 128 bits, você precisa modificar dois arquivos (local_policy.jar e US_export_policy.jar) que estão em jre\lib\security na sua instalação do JRE ou JDK.

Vai dar trabalho …
[/quote]

Estive a ver e a função PasswordDeriveBytes utiliza o algoritmo PBKDF1!
“Derives a key from a password using an extension of the PBKDF1 algorithm”

Realmente de criptografia não percebo nada :lol: