Вещи я зашифрованный файл с помощью ПДСА с помощью этого кода, который я придумал:RSA шифрование большого файла
for (int a = 0; a <= iterations; a++)
{
byte[] plain;
int rsaLen = rsa.KeySize/8 - 11;
int bytesLen = plain.Length;
int block = bytesLen - rsaLen * a;
//The last block in the text may not be a full block
if (block > rsaLen)
plain = new byte[maxRsaLength];
else
plainblock = new byte[block];
Buffer.BlockCopy(plaintext, rsaLen * a, plain, 0, plain.Length);
//purfoming the encryption
ciphertext.Append(Convert.ToBase64String(rsa.Encrypt(plain, false)));
}
вещи, когда я пытаюсь расшифровать я должен преобразовать шифротекст, который я поставил базу 64 в базовые 64 блока, но затем я получаю неправильную длину из метода расшифровки RSAServiceProvider. Я следую примеру, написанному на этом сайте: http://digitalsquid.co.uk/2009/01/rsa-in-cs/ безрезультатно. Я не получаю никаких ошибок encrption только расшифровки. Я не могу даже быть уверенным, правильно ли я прав. Пыльник моего дешифрования цикл:
public string Decrypt(string ciphertext, string key = null)
{
//checking for ciphertext. Exception raise if null
if (String.IsNullOrEmpty(ciphertext)) throw new ArgumentNullException(ciphertext, "There is no ciphertext to decrypt.");
//String holding the decrypted value
string plaintext = String.Empty;
//chanck is the user has provided a key. If not the use the one automatically generated
string keyToUse = String.IsNullOrEmpty(key) ? privatekey : key;
//set the key
rsa.FromXmlString(keyToUse);
//Determine the blocksizes for the iterations
int blockSize = ((rsa.KeySize/8) % 3 != 0) ? (((rsa.KeySize/8)/3) * 4) + 4 : ((rsa.KeySize/8)/3) * 4;
int iterations = ciphertext.Length/blockSize;
byte[] allPlaintextAsBytes = new byte[0];
try
{
for (int i = 0; i < iterations; i++)
{
//to decrypt this we have to take the cipher text from a base 64 string an array.
byte[] cipherTextAsBytes = Convert.FromBase64String(ciphertext.Substring(blockSize * i, blockSize));
byte[] partialPlaintextAsBytes = rsa.Decrypt(cipherTextAsBytes, false);
}
}....(Catch Exceptions down here)
Я ЗНАЮ, ЧТО ЭТО НЕ ЛУЧШИМ расколоть ФАЙЛ НА RSA IT. Да, обычно вы шифруете ключ для шифрования потока, такого как AES с RSA, и шифруете файл с помощью AES. Это проект, который я делаю, поэтому я должен сделать это таким образом.
Благодарим за помощь заранее.
Убедитесь, что тот, кто назначил проект, указывает, что это глупо для других учеников, которые могут этого не знать. Это не просто соглашение о безопасности, которое выполняет вложенное симметричное шифрование: он не уверен в необходимости прямого шифрования с помощью RSA. Я бы не хотел, чтобы поколение студентов уходило от этого проекта, думая, что практика в любом случае в порядке. –
@MyseriousDan Я бы не согласился. Конечно, глупо делать это так. Однако «прямое» шифрование RSA является безопасным. –
Это немного глупо да. Шифрование с помощью ключа 512 или 128 глупо, но это помогает людям понять, как работают эти числа. Причина, по которой он попросил меня сделать это, так я получаю, чтобы сделать эту работу. Просто выполнив этот проект, я до сих пор узнал, что блокирующие шифры не могут шифровать блоки, большие, чем модуль. Я не знал этого, прежде чем получил проект. Я могу смело сказать, что я не эксперт, но те, которые не должны просто избивать этот вопрос и даже не отвечать на него просто из-за его необычного способа делать вещи. Вопрос в том, что код, который я написал, не работает, а не понятия –