2009-12-08 3 views
1

특정 키를 사용하여 첫 번째 부분을 암호화하고 특정 키를 사용하여 마지막 부분을 암호화하는 "myFile"파일을 만들고 싶습니다. 지금까지 나는 이런 일이 :C#의 한 파일과 연결된 두 개의 CryptoStreams

cs1 = new CryptoStream(myFile, symmetricKey1.CreateEncryptor(key1, key1IV), CryptoStreamMode.Write); 

cs2 = new CryptoStream(myFile, symmetricKey2.CreateEncryptor(key2, key2IV), CryptoStreamMode.Write); 

을 그리고 CS1을 사용하여 파일의 첫 부분에 쓰고 싶습니다 초 CS2와 종류의 같은 :

while((data = fs1.readByte()) != -1){ 
    cs1.WriteByte(data); 
} 

while((data = fs2.readByte()) != -1){ 
    cs2.WriteByte(data); 
} 

이 오류없이 진행 , 두 번째 CryptoStream (cs2)은 실제로 파일에 쓰지 않습니다. 아무도 왜 이런 일이 일어날 지 알고 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 감사

편집 : CryptoStream을 닫기 것은 물론으로 myfile 종료하는 것,하지만 난 닫은 후 다시 다음 두 번째시키는 CryptoStream을 시작하면, 이것이 내가 기대했던대로의 깨끗한 아니지만 작동하는 것 같다 않습니다. 도와 주셔서 감사합니다!

답변

1

적어도 cs1.FlushFinalBlock() while 루프 다음에 호출해야한다고 생각합니다 (cs2와 동일).

다음에 cs2 을 작성하십시오. cs1을 완료하면됩니다. cs1을 닫으면 myFile 스트림을 닫는 지, StreamReaders는 그렇게 할 지에 대해서는 조사해야 할 수도 있지만 CryptoStream 문서에서는이 파일에 대한 언급이 없습니다.

0

루프를 반복하면서 다음을 시도해보십시오.

csX.Flush(); 
csX.Dispose(); 

또는 더 나은 방법으로 사용 블록을 사용하고 cs1이 이미 삭제 된 후 cs2를 만듭니다.

관련 문제