btw,你令我諗起以前喺大學做過一份assignment,用C寫的,雖然唔係encrypt同decrypt,但係有啲類似,因為我嗰時係做compress同decompress,正常嚟講compress完之後再decompress係應該出返同一樣嘅嘢,我試過一啲txt file係冇問題的,但係compress再decompress一啲其他file就出現問題喇,變唔返原本個file,最衰係我交完份功課先知有問題,搞到扣咗十幾分,原本好有信心拎滿分再加bonus
之後睇返個algorithm出現啲咩問題呢?原來係因為我用C寫,其中有兩個問題
第一個問題,因為C係char pointer嚟,所以佢認\0作為結尾,我唔記得處理呢個問題,或者係用錯方法去整,如果一個正常嘅txt file,正常係唔會無啦啦有個\0呢個char出現,所以我用txt嚟試係check唔到問題chok唔到呢個bug出嚟,但係jpg、mp4呢啲檔就唔同喇,佢呢啲唔係txt咁係meaningful,而係一堆冇意義嘅chars組成砌成,所以入面肯定會包含\0,一read到呢個\0佢就認為條string完咗唔繼續read落去導致錯誤發生,但如果用C++嘅std string就唔會發生呢個問題,但係嗰時話用C寫可以拎到bonus,所以先用C寫,估唔到中咗伏踩到坑踩中地雷陷阱
第二個問題,ch=fgetc(fp),唔小心將int ch寫咗做char ch,情況同上面一樣,如果read正常嘅嘢係冇問題,但係如果係read jpg或者mp4嗰啲就有機會因為有特殊字符所以搞到read唔到返嚟
所以話只係寫錯咁少嘢已經搞出咁多問題,何況佢係一個規模咁大嘅software,呢啲問題肯定更加多,啲bugs有排先fix到,要搵多啲人幫佢踩坑先得
所以儘量唔好加密啲重要嘅嘢,如果唔係真係攞嚟較飛