큰 파일 암호화 : 나는 암호문을 변환해야 해독하려고 할 때 일이다는 RSA는 것은 내가 생각 해낸이 코드를 사용하여 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의 decrypt 메소드에서 잘못된 길이 exceptioonon을 얻고 있습니다. 나는이 사이트에 쓰인 예제를 따라왔다 : http://digitalsquid.co.uk/2009/01/rsa-in-cs/. 나는 암호 해독을 얻지 못한다. 나는 심지어 내가 암호화를 제대로했는지 확신 할 수 없다. 나는이 RSA IT에 파일을 분할하는 BEST NOT 것을 알고
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로 AES와 같은 스트림 암호로 키를 암호화하고 AES로 파일을 암호화합니다. 이것은 내가하고있는 프로젝트이므로이 방법으로해야합니다.
미리 도움을 주셔서 감사합니다.
프로젝트를 할당 한 사람은 누구도 그 사실을 모르는 다른 학생들에게 어리 석다는 것을 지적하십시오. 중첩 된 대칭 암호화를 수행하는 것은 보안 규칙이 아닙니다. RSA를 사용하여 직접 암호화를 수행하는 것이 안전하지 않습니다. 나는이 프로젝트에서 벗어난 한 세대의 학생들이 연습이 어쨌든 괜찮다고 생각하지 않을 것이다. –
@MyseriousDan 나는 약간 동의하지 않습니다. 물론, 이런 식으로하는 것은 어리 석다. 그러나 "직접적인"RSA 암호화는 안전합니다. –
조금 어리 석다. 512 키 또는 128로 암호화하는 것은 어리석지 만 사람들이이 번호의 작동 방식을 이해하는 데 도움이됩니다. 그가 나에게이 일을하도록 요청한 이유는이 일을하기 위해서입니다. 이 프로젝트를 수행함으로써 블록 암호가 모듈러스보다 큰 블록을 암호화 할 수 없다는 것을 지금까지 배웠습니다. 내가 프로젝트를 갖기 전에 나는 이것을 알지 못했다. 나는 안전하게 전문가라고 말할 수는 없지만 단지이 질문을 때려서는 안되며 그저 일을하는 데있어서 그 비정상적인 방식으로 만 대답하지 않아야합니다. 문제는 내가 쓰지 않은 코드가 개념이 아니라는 것입니다. –