AES Encryption - Java & .NET

  • Allgemein

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Gangsterkrafter.

    AES Encryption - Java & .NET

    Hallo,

    ich möchte gerne etwas in VB.NET mit AES verschlüsseln, jedoch kommt hierbei immer ein falscher Wert raus.
    In Java habe ich folgendes benutzt und hier stimmt der ausgegebene Wert auch:

    Java:

    C#-Quellcode

    1. public static void main(String[] args) throws Exception {
    2. byte[] key = "abcdefgh12345678".getBytes(Charset.forName("UTF-8"));
    3. byte[] input = "Test123".getBytes(Charset.forName("UTF-8"));
    4. String encrypted = Base64.getEncoder().encodeToString(encrypt(key, input));
    5. //Output: 1Qpz0SfhOhOlBEQ6wIbfxw==
    6. }
    7. private static byte[] encrypt(byte[] bKey, byte[] bInput) throws Exception {
    8. SecretKeySpec specKey = new SecretKeySpec(bKey, "AES");
    9. Cipher localCipher = Cipher.getInstance("AES");
    10. localCipher.init(1, specKey);
    11. return localCipher.doFinal(bInput);
    12. }


    VB.NET:

    VB.NET-Quellcode

    1. Dim key As String = "abcdefgh12345678"
    2. Dim input As String = "Test123"
    3. Dim encrypted As String = Convert.ToBase64String(Encoding.UTF8.GetBytes(AES_Encrypt(key, input)))
    4. 'Output: MkIreHZBS1NEL205S0xzR2lISXhSdz09
    5. Public Function AES_Encrypt(ByVal key As String, ByVal input As String) As String
    6. Dim AES As New System.Security.Cryptography.RijndaelManaged
    7. Dim Hash_AES As New System.Security.Cryptography.MD5CryptoServiceProvider
    8. Dim encrypted As String = ""
    9. Try
    10. Dim hash(31) As Byte
    11. Dim temp As Byte() = Hash_AES.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))
    12. Array.Copy(temp, 0, hash, 0, 16)
    13. Array.Copy(temp, 0, hash, 15, 16)
    14. AES.Key = hash
    15. AES.Mode = CipherMode.ECB
    16. Dim DESEncrypter As System.Security.Cryptography.ICryptoTransform = AES.CreateEncryptor
    17. Dim Buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(input)
    18. encrypted = Convert.ToBase64String(DESEncrypter.TransformFinalBlock(Buffer, 0, Buffer.Length))
    19. Return encrypted
    20. Catch ex As Exception
    21. Return ""
    22. End Try
    23. End Function


    Woran liegt das?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kraizy“ ()

    bist du dir sicher, dass AES unter java AES im ECB modus in .NET entspricht?
    Du solltest sowieso CBC benutzten.
    Für Java sieht das so aus:
    stackoverflow.com/questions/15…s-encrypt-decrypt-example

    Des weiteren solltest du dich mindestens daran halten:
    github.com/bluebirdtech/AESThe…ESThenHMAC/AESThenHMAC.cs
    Einen MD5 Hash als AES Key zu benutzen, ist nicht gerade das sicherste. MD5 sollte man heutzutage garnicht mehr nutzen.
    Hey :)
    Probiers Mal Hiermit:

    Aes256Base64Encrypter.vb

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Text
    3. Imports System.Security.Cryptography
    4. Public Class Aes256Base64Encrypter
    5. Public Shared Function Encrypt(ByVal plainText As String, ByVal secretKey As String) As String
    6. Dim encryptedPassword As String = Nothing
    7. Using outputStream As MemoryStream = New MemoryStream()
    8. Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
    9. Using cryptoStream As CryptoStream = New CryptoStream(outputStream, algorithm.CreateEncryptor(), CryptoStreamMode.Write)
    10. Dim inputBuffer() As Byte = Encoding.Unicode.GetBytes(plainText)
    11. cryptoStream.Write(inputBuffer, 0, inputBuffer.Length)
    12. cryptoStream.FlushFinalBlock()
    13. encryptedPassword = Convert.ToBase64String(outputStream.ToArray())
    14. End Using
    15. End Using
    16. Return encryptedPassword
    17. End Function
    18. Public Shared Function Decrypt(ByVal encryptedBytes As String, ByVal secretKey As String) As String
    19. Dim plainText As String = Nothing
    20. Using inputStream As MemoryStream = New MemoryStream(Convert.FromBase64String(encryptedBytes))
    21. Dim algorithm As RijndaelManaged = getAlgorithm(secretKey)
    22. Using cryptoStream As CryptoStream = New CryptoStream(inputStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read)
    23. Dim outputBuffer(0 To CType(inputStream.Length - 1, Integer)) As Byte
    24. Dim readBytes As Integer = cryptoStream.Read(outputBuffer, 0, CType(inputStream.Length, Integer))
    25. plainText = Encoding.Unicode.GetString(outputBuffer, 0, readBytes)
    26. End Using
    27. End Using
    28. Return plainText
    29. End Function
    30. Private Shared Function getAlgorithm(ByVal secretKey As String) As RijndaelManaged
    31. Dim salt As String = "meinsalz"
    32. Const keySize As Integer = 256
    33. Dim keyBuilder As Rfc2898DeriveBytes = New Rfc2898DeriveBytes(secretKey, Encoding.Unicode.GetBytes(salt))
    34. Dim algorithm As RijndaelManaged = New RijndaelManaged()
    35. algorithm.KeySize = keySize
    36. algorithm.IV = keyBuilder.GetBytes(CType(algorithm.BlockSize / 8, Integer))
    37. algorithm.Key = keyBuilder.GetBytes(CType(algorithm.KeySize / 8, Integer))
    38. algorithm.Padding = PaddingMode.PKCS7
    39. Return algorithm
    40. End Function
    41. End Class



    Das ganze nutze ich auch, und Bei mir Funzt alles.
    Ist jedoch (Glaube ich) Strict Off Programmiert, von daher musst du mal gucken ob er dir Fehler ins Gesicht Wirft, sollte aber eigentlich Klappen.

    lg
    Begeisterter BF4 Spieler :D