Hi Leute,
ich hänge hier an dem Problem mit der ECDiffieHellmanCng Klasse. Ich will eine Nachricht verschlüsselt mit dem PublicKey vom Partner und meinem PublicKey(?). Das verschlüsseln funktioniert zwar, allerdings nicht das entschlüsseln. Weiß jemand woran dies liegen kann?
Ich bekomme die Fehlermeldung: Der angegebene Schlüssel hat keine gültige Größe für diesen Algorithmus.
Hier mal der Code
Spoiler anzeigen
ich hänge hier an dem Problem mit der ECDiffieHellmanCng Klasse. Ich will eine Nachricht verschlüsselt mit dem PublicKey vom Partner und meinem PublicKey(?). Das verschlüsseln funktioniert zwar, allerdings nicht das entschlüsseln. Weiß jemand woran dies liegen kann?
Ich bekomme die Fehlermeldung: Der angegebene Schlüssel hat keine gültige Größe für diesen Algorithmus.
Hier mal der Code
VB.NET-Quellcode
- Imports System
- Imports System.IO
- Imports System.Security.Cryptography
- Imports System.Text
- Public Class Form1
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'Create Keys
- Dim p As Keys = CreateKeys(CngAlgorithm.ECDiffieHellmanP521, CngAlgorithm.Sha512)
- Dim PrivateKey As Byte() = p.PrivateKey
- Dim PublicKey As Byte() = p.PublicKey
- 'Encrypt Message
- Dim Message As String = "Hello World"
- Dim IV As Byte() = {23, 45, 76, 22, 100, 142, 244, 83}
- Dim encryptData_ As Byte() = EncryptData(System.Text.UTF8Encoding.UTF8.GetBytes(Message), PublicKey, Algorithm.AES, IV)
- 'Decrypt Message
- MsgBox(DecryptData(encryptData_, PrivateKey, IV))
- End Sub
- Private ECDiffieHellman_ As ECDiffieHellmanCng
- Private Structure Keys
- Public PrivateKey As Byte()
- Public PublicKey As Byte()
- End Structure
- Private Function CreateKeys(ByVal CngAlgorithm_ As CngAlgorithm, Optional ByVal HashAlgorithm_ As CngAlgorithm = Nothing, Optional ByVal KeyName As String = Nothing) As Keys
- ECDiffieHellman_ = New ECDiffieHellmanCng(CngKey.Create(CngAlgorithm_, KeyName, New CngKeyCreationParameters() With {.ExportPolicy = CngExportPolicies.AllowPlaintextExport}))
- Select Case HashAlgorithm_
- Case Nothing
- ECDiffieHellman_.HashAlgorithm = CngAlgorithm.Sha256
- Case Else
- ECDiffieHellman_.HashAlgorithm = HashAlgorithm_
- End Select
- Using Keys_ As ECDiffieHellmanCng = ECDiffieHellman_
- Keys_.DeriveKeyMaterial(CngKey.Import(ECDiffieHellman_.PublicKey.ToByteArray, CngKeyBlobFormat.EccPublicBlob))
- Keys_.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash
- Keys_.HashAlgorithm = CngAlgorithm.Sha256
- Dim KeysNew As New Keys
- KeysNew.PrivateKey = Keys_.Key.Export(CngKeyBlobFormat.EccPrivateBlob)
- KeysNew.PublicKey = Keys_.Key.Export(CngKeyBlobFormat.EccPublicBlob)
- Return KeysNew
- End Using
- End Function
- Enum Algorithm
- AES
- DES
- TDES
- End Enum
- Private Function EncryptData(ByVal Data As Byte(), ByVal PublicKey As Byte(), ByVal Algo As Algorithm, Optional ByVal iv As Byte() = Nothing) As Byte()
- Select Case Algo
- Case Algorithm.AES
- Using aes As New AesCryptoServiceProvider()
- iv = aes.IV
- ' Encrypt the message
- Using ciphertext As New MemoryStream()
- Using cs As New CryptoStream(ciphertext, aes.CreateEncryptor(), CryptoStreamMode.Write)
- Dim plaintextMessage As Byte() = Data
- cs.Write(plaintextMessage, 0, plaintextMessage.Length)
- cs.Close()
- Return ciphertext.ToArray()
- End Using
- End Using
- End Using
- Case Algorithm.DES
- Using des As New DESCryptoServiceProvider()
- iv = des.IV
- ' Encrypt the message
- Using ciphertext As New MemoryStream()
- Using cs As New CryptoStream(ciphertext, des.CreateEncryptor(), CryptoStreamMode.Write)
- Dim plaintextMessage As Byte() = Data
- cs.Write(plaintextMessage, 0, plaintextMessage.Length)
- cs.Close()
- Return ciphertext.ToArray()
- End Using
- End Using
- End Using
- Case Algorithm.TDES
- Using tdes As New TripleDESCryptoServiceProvider
- iv = tdes.IV
- ' Encrypt the message
- Using ciphertext As New MemoryStream()
- Using cs As New CryptoStream(ciphertext, tdes.CreateEncryptor(), CryptoStreamMode.Write)
- Dim plaintextMessage As Byte() = Data
- cs.Write(plaintextMessage, 0, plaintextMessage.Length)
- cs.Close()
- Return ciphertext.ToArray()
- End Using
- End Using
- End Using
- End Select
- End Function
- Private Function DecryptData(ByVal EncryptData As Byte(), ByVal PrivateKey As Byte(), ByVal iv As Byte()) As String
- Using aes As New AesCryptoServiceProvider()
- aes.Key = PrivateKey
- aes.IV = iv
- ' Decrypt the message
- Using plaintext As New MemoryStream()
- Using cs As New CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write)
- cs.Write(EncryptData, 0, EncryptData.Length)
- cs.Close()
- Dim message As String = Encoding.UTF8.GetString(plaintext.ToArray())
- Return message
- End Using
- End Using
- End Using
- End Function
- End Class