2012-03-15 121 views
1

希望你能在這裏幫忙。我使用加密流創建一個文件附加行到這個文件。 如果我一次寫出所有行,那麼文件將正確加密/解密。 但是,如果我以追加模式打開文件,追加一行,關閉然後文件。然後只有第一行正確解密,其他行返回垃圾。追加到使用密碼流加密的文件後,解密失敗

我想知道這是否是正確的行爲。我試圖建立用戶在一天中輸入的加密細節的文本文件;然後在一天結束時批量處理它們。 解密和加密整個文件只是爲了添加一行代碼的開銷似乎過大,因爲在一天中最終可能會有1000行代碼。

我正在使用excact相同的加密提供程序具有相同的Initialisaion矢量和所有訪問該文件的關鍵?

我做錯了什麼,或者是不可能附加到加密文件?

乾杯 諾埃爾

回答

2

是的,這是預期的行爲。你可以做的一件事是分別加密每條記錄(文本行),並添加一個前綴,指示塊的開始和它的長度。然後從文件中讀取時,請閱讀前綴,檢查記錄長度並加載記錄。重複每個記錄。

+0

感謝尤金,這很有道理,我會繼續進行那項工作。 – Bigtoe 2012-03-15 14:45:42

+0

我對每個塊進行了加密,Base64對它進行了編碼並將它一次一行地寫入到文件中,這確實起到了作用。 – Bigtoe 2012-03-15 15:10:24

1

我懷疑你使用的密碼是流或鏈接密碼 - 這意味着一個加密塊的輸出被用來修改下一個塊。直接附加到這種類型的數據,然後試圖解密批次將無法正常工作,因爲塊之間的依賴關係將被破壞。

解決這個問題的一個簡單方法是添加一個標記或爲文件中每個記錄的偏移+長度保存一些數據。當您開始執行批處理時,您需要重置每條記錄的CryptoProvider。