2012-05-28 3 views
4

Существует множество тем по шифрованию и расшифровке RSA с использованием BouncyCastle, однако я сталкиваюсь с неожиданным поведением.C# BouncyCastle RSA Шифрование и дешифрование

Я пытаюсь зашифровать 64 байта блокировки данных с использованием секретного ключа размером 64 байт

Я вычисления шифрования RSA, как следующие:

public byte[] Encrypt(byte[] data, AsymmetricKeyParameter key) 
{ 
    var engine = new RsaEngine(); 
    engine.Init(true, key); 
    var blockSize = engine.GetInputBlockSize(); 
    return engine.ProcessBlock(data, 0, blockSize); 
} 

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

public byte[] Decrypt(byte[] data, AsymmetricKeyParameter key) 
{ 
    var engine = new RsaEngine(); 
    engine.Init(false, key); 
    var blockSize = engine.GetInputBlockSize(); 
    return engine.ProcessBlock(data, 0, blockSize); 
} 

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

Однако, когда я декодирую массив из 64 байтов с использованием 64-байтового открытого ключа, я возвращаю блок данных размером 62 байта. Что более странно, так это то, что значения, содержащиеся в массиве из 62 байтов, равны значениям исходного массива 64 байта (предварительное шифрование), однако в декодированном массиве отсутствует первый индекс исходных данных и конечный индекс.

Я пробовал использовать разные ключи и разные наборы данных, и то же самое происходит.

Должно быть, я делаю что-то неправильно, но я не вижу этого.

Cheers.

+0

Пожалуйста, не вводите код. Скопируйте и вставьте точный код, так как выше не компилируется. –

+0

Подсказка: Как вы думаете, значение 'engine.GetInputBlockSize();' есть? Вот еще один намек. Значение отличается в зависимости от того, находится ли двигатель RSA в режиме шифрования или режиме дешифрования. –

+0

Вы сделали это до сих пор? Потому что я столкнулся с той же проблемой и, возможно, вам понадобится ваш совет :) – Roylee

ответ

2

Вы неправильно поняли основные понятия.

  1. 512 бит RSA очень слабый, использовать по крайней мере 1024 бит
  2. закрытый ключ не для шифрования. Это для расшифровки и подписания. Открытый ключ предназначен для шифрования и проверки.
  3. Прокладка необходима для безопасности RSA. Типичная схема заполнения требует нескольких десятков байтов.
  4. Даже с учебником RSA RSA может работать только с значениями, меньшими, чем модуль. Таким образом, модуль с 512 бит не может работать с произвольными 64-байтовыми/512-битными значениями. Но только на 511 бит.

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

+0

Я согласен с тем, что вы говорите: 1.) Интерфейс, с которым я работаю, требует использования 512-битного ключа RSA. 2.) Интерфейс, с которым я работаю, выполняет дешифрование с открытым ключом, поэтому требуется шифрование секретного ключа. 3.) Используемая прокладка предварительно вычисляется до шифрования, когда используется настраиваемая схема заполнения. –

Смежные вопросы