Реализация гибридного шифрования?

1

У меня уже есть асимметричный алгоритм, реализованный в приложении MVC С#, однако я бы хотел изменить метод шифрования, чтобы использовать как симметричное, так и асимметричное шифрование (шифрование AKA Hybrid). Любая идея, как я могу это сделать?

Асимметричное шифрование:

public string AsymmEncrypt(int accId, string input, string publickey)
    {
        Account a = new UserRepository().GetAccountById(accId);
        RSACryptoServiceProvider myAlg = new RSACryptoServiceProvider();
        CspParameters cspParams = new CspParameters();
        publickey = new UserRepository().PublicKeyByAccountId(accId);
        cspParams.KeyContainerName = publickey;
        myAlg = new RSACryptoServiceProvider(cspParams);

        byte[] cipher = myAlg.Encrypt(UTF8Encoding.UTF8.GetBytes(input), true);
        return Convert.ToBase64String(cipher);
    }

Асимметричный расшифровка:

        public string AsymmDecrypt(int accId, string input, string privatekey)
    {
        Account a = new UserRepository().GetAccountById(accId);
        RSACryptoServiceProvider myAlg = new RSACryptoServiceProvider();
        CspParameters cspParams = new CspParameters();
        privatekey = new UserRepository().PrivateKeyByAccountId(accId);

        byte[] cipher = myAlg.Decrypt(Convert.FromBase64String(input), true);
        return UTF8Encoding.UTF8.GetString(cipher);
    }
Теги:
encryption-symmetric
encryption-asymmetric
hybrid

2 ответа

0

Я бы предложил прочитать, как реализуются SSL или OpenPGP.

Я не уверен, с какой частью вы боретесь.

Короче говоря, асимметричный алгоритм используется для симметричного обмена ключами.

Симметричный алгоритм используется для криптования объемных данных (поток/блок). Вы не сможете это сделать, просто изменив свои 2 функции, вам нужно будет реализовать рукопожатие и обмен ключами.

Поскольку у вас есть приложение MVC.NET, вы можете разместить его на веб-сервере и получить транспорт HTTPS/SSL. Вы также можете сделать то же самое с WCF. Любая причина, почему вы не используете то, что предоставляется базовым транспортом? Вы даже можете настроить приложение (web.config) на наличие клиентских сертификатов.

PS: Я согласен с тем, что не изобретаю колесо, даже статью Microsoft, о которой связан Эрик, дает предупреждение об этом.

Внимание. Мы рекомендуем не пытаться создать свой собственный метод обмена ключами из основных функциональных возможностей, потому что многие детали операции должны быть выполнены тщательно, чтобы обмен ключами был успешным.

0

Вероятно, вы не должны пытаться изобретать велосипед здесь. Пространство имен System.Security.Cryptography в.net alrady предоставляет большой набор криптографических функций, которые достаточно хорошо проверены. Не пытайтесь использовать свои собственные асимметричные функции для достижения этого.

Если вы хотите использовать распределение секретного ключа с помощью шифрования с открытым ключом, вы должны использовать что-то вроде RSAPKCS1KeyExchangeFormatter или, может быть, даже RSAOAEPKeyExchangeFormatter, если у вас есть гибкость для поддержки PKCS # 1v2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню