none
CryptEncryptMessage и сертификаты RRS feed

  • Вопрос

  • CryptEncryptMessage делает следующую работу:

    1. Создаёт случайный ключ симметричного шифрования
    2. Шифрует этим ключом переданный массив байт
    3. Симметричный ключ п.1 и 2 шифруется открытым ключом получателя, взятым из сертификата получателя для каждого из получателей
    4. Зашифрованное в п.3 объединяется с зашифрованным в п.2

    Всё отлично. Но у меня (и это типично) нет никакого сертификата. Некоторым образом сертификаты мне вообще не нужны - открытые ключи я получаю супердоверенным образом и "складирую" для последующего использования. Внимание, вопрос.

    Как можно обойтись (вероятно, другим набором CryptoAPI-функций) без сертификатов при шифровании/дешифровании?

    Просто чтобы уточнить.

    Вот такой код в .NET (C#) делает в точности, что нужно

    public static byte[] Encrypt(byte[] Content, RSA Key)
    {
    	SymmetricAlgorithm sa = SymmetricAlgorithm.Create();
    	ICryptoTransform ct = sa.CreateEncryptor();
    	byte[] encrypt = ct.TransformFinalBlock(Content, 0, Content.Length);
    
    	var fmt = new RSAPKCS1KeyExchangeFormatter(Key);
    	byte[] keyex = fmt.CreateKeyExchange(sa.Key);
    
    	var result = new byte[keyex.Length + sa.IV.Length + encrypt.Length];
    	Buffer.BlockCopy(keyex, 0, result, 0, keyex.Length);
    	Buffer.BlockCopy(sa.IV, 0, result, keyex.Length, sa.IV.Length);
    	Buffer.BlockCopy(encrypt, 0, result, keyex.Length + sa.IV.Length, encrypt.Length);
    	return result;
    }
    
    Это почти точная копия того, что делает CryptEncryptMessage, но в .NET - никакими сертификатами и не пахнет. Хотелось бы обойтись без них и в коде на C. Как это сделать? Буду благодарен за любую помощь
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:07 MSDN Forums consolidation (От:Разработка Windows-приложений)
    7 сентября 2010 г. 17:15

Ответы