v1.0.3 — 修正另存預設檔名可能覆蓋原檔
修正
另存時的預設檔名對大寫副檔名無效,可能導致覆蓋原檔。
舊版用 檔名.replace(".pdf", "_無密碼") 產生預設檔名,對 報告.PDF 這種大寫副檔名一段都換不到——預設檔名等於原檔名,使用者若直接按儲存(並在「檔案已存在,要取代嗎」按下取代),就會覆蓋掉自己的加密原檔。改用 os.path.splitext() 只處理最後一個副檔名。
順帶修掉 a.pdf.b.pdf 這類檔名每一段都被取代的問題。
| 選擇的檔案 | 1.0.2 的預設檔名 | 1.0.3 |
|---|---|---|
報告.pdf |
報告_無密碼.pdf |
不變 |
報告.PDF |
報告.PDF(=原檔名) |
報告_無密碼.pdf |
my.pdf.report.pdf |
my_無密碼.report_無密碼 |
my.pdf.report_無密碼 |
新增
--self-test:產生 RC4-40 / RC4-128 / AES-128 / AES-256 四種加密 PDF 各解密一次,並確認錯誤密碼會被擋下,全數通過時離開碼為 0。此執行檔不帶主控台,因此只回報離開碼、不輸出訊息。
PDFUnlocker.exe --self-test
搭配新增的 GitHub Actions,每次變更都會打包後對產物本身執行這項測試——原始碼解得開不代表打包後的執行檔解得開,而這類問題原本要等使用者回報才會發現。
新增 SECURITY.md,說明本工具碰得到與碰不到什麼(不連網、密碼僅存在記憶體、原始檔只讀)。
沒有變的
介面、操作步驟、解密行為與相依套件皆與 1.0.2 相同。解密仍由 pypdf 處理,本工具沒有任何猜測或繞過機制。
檔案
PDFUnlocker.exe 以 IV 程式碼簽章憑證(YU-MING HSU,SSL.com 簽發)簽署,並帶 RFC3161 時戳。
SHA256: F8D990AE0D4A5472B1FC68F2C9658BE3B684E854F2733266D167255E576AD33F