Если у меня есть ключ publi c на основе libsodium , как я могу использовать его с инструментом OpenSSL для шифрования текста и сделать так, чтобы другая конечная точка на основе натрия могла его дешифровать?
То есть, используйте в команде openssl
(возможно, pkeyutl
) те же шифры и параметры, что и в libsodium.
В качестве основы для этого у меня есть C# пример:
using System;
public class Program
{
public static void Main()
{
var secretValue = System.Text.Encoding.UTF8.GetBytes("mySecret");
var publicKey = Convert.FromBase64String("2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU=");
var sealedPublicKeyBox = Sodium.SealedPublicKeyBox.Create(secretValue, publicKey);
Console.WriteLine(Convert.ToBase64String(sealedPublicKeyBox));
}
}
Должен работать. NET Core 3.1 с пакетом Sodium.Core . Я запустил его в режиме онлайн с this do tnet fiddle (поэтому никаких дополнительных инструментов для проверки этого кода вообще не требуется).
Теперь в bash shell , если я попробую что-то вроде этого:
secret="text to be encrypted"
pubkey="2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU="
echo "-----BEGIN PUBLIC KEY-----
${pubkey}
-----END PUBLIC KEY-----" > pkey.tmp
echo "${secret}" | openssl pkeyutl -encrypt -pubin -inkey pkey.tmp | base64
OpenSSL завершится неудачно с этим:
25769803792:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:crypto/asn1/asn1_lib.c:91:
25769803792:error:0D068066:asn1 encoding routines:asn1_check_tlen:bad object header:crypto/asn1/tasn_dec.c:1118:
25769803792:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:crypto/asn1/tasn_dec.c:290:Type=X509_PUBKEY
25769803792:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:crypto/pem/pem_oth.c:33:
Если я удалю окружающие строки во временном файле ключа publi c, я получу затем:
pkeyutl: Error initializing context
25769803792:error:0909006C:PEM routines:get_name:no start line:crypto/pem/pem_lib.c:745:Expecting: PUBLIC KEY
Для того, что я смог найти, OpenSSL поддерживает шифры и алгоритмы, используемые libsodium ; Я думаю, что просто не знаю, как эффективно сказать OpenSSL, что они ...