Ovie Prince Tegaton Ответов: 1

Как я могу использовать свой собственный ключ для шифрования данных с помощью ecdeffiehellmancng


Моя задача состоит в том, чтобы зашифровать данные с помощью криптографии эллиптической кривой в .Net (специфичной для клиента), я попытался использовать образец от Microsoft, но он, похоже, каждый раз генерирует свой собственный ключ. Мне нужно использовать свой собственный ключ для этого процесса, например, создать пароль "S3curEChaNNel_01?" и преобразовать его в байт, а затем использовать в качестве ключа, но я не могу найти способ сделать это.

Using alice As New ECDiffieHellmanCng()
                Dim abData() As Byte
                Dim Str = txtKey.Text 'custom password
                abData = System.Text.Encoding.Default.GetBytes(Str)
                Str = System.Text.Encoding.Default.GetString(abData)

                Dim bobPublicKey() As Byte
                Dim bobKey() As Byte
                Dim bob As New ECDiffieHellmanCng()

                bob.KeyDerivationFunction = ECDiffieHellmanKeyDerivationFunction.Hash
                bob.HashAlgorithm = CngAlgorithm.Sha256
                bobPublicKey = bob.PublicKey.ToByteArray()
                bob.HmacKey = abData

                bobKey = bob.DeriveKeyMaterial(CngKey.Create(CngAlgorithm.Sha256))
'at this line i get an exception, "The requested operation is not supported."

                'Dim aliceKey As Byte() = alice.DeriveKeyMaterial(CngKey.Create(CngAlgorithm.Sha256))
                Dim encryptedMessage As Byte() = Nothing
                Dim iv As Byte() = Nothing
                txtOutput.Text = ByteArrayToString(Encrypt(bobKey, txtPlainStr.Text, encryptedMessage, iv))
            End Using


Пожалуйста, помогите мне, любой рабочий образец будет очень признателен

Что я уже пробовал:

Я пробовал использовать
бобки = Боб.DeriveKeyMaterial(CngKey.Импорт (abData, CngKeyBlobFormat.EccPrivateBlob))

и

бобки = Боб.DeriveKeyMaterial(CngKey.Импорт (abData, CngKeyBlobFormat.EccPublicBlob))

1 Ответов

Рейтинг:
1

Daniel Fisher (lennybacon)

Ты не можешь. Вам нужен ключ эллиптической кривой. Это намного сложнее и безопаснее, чем преобразование чего-то вроде "S3curEChaNNel_01?" в массив байтов.

Примером ключа ECC может служить сертификат ECC, выданный центром сертификации.

Если вы не хотите идти по дороге PKI. Создайте один и импортируйте его следующим образом:

//Save
var key = CngKey.Create(CngAlgorithm.Sha256);
var bob = new ECDiffieHellmanCng(key);
var x = bob.Key.Export(CngKeyBlobFormat.EccPrivateBlob);

//Load
bob = new ECDiffieHellmanCng(CngKey.Import(x, CngKeyBlobFormat.EccPrivateBlob))