|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2005-06-23, 10:05 AM | #1 |
管理版主
|
VBA實現 加解密文件
以下程式碼只需存檔成 .vbs 或 .wsf 就可 滑鼠雙擊
利用 windows 內建的 Microsoft Windows Script 來執行 ※原則上建議用在不要太大的純文字檔上(.txt),畢竟 .vbs是直譯器的應用很費資源的 ※個人保證上述腳本在未經變動下是不會造成任何破壞的(病毒) ※vbs如無法執行請安裝 Microsoft Windows Script 請至 http://www.microsoft.com/downloads/d...C-0EA28C9A5D9D http://www.microsoft.com/downloads/d...playLang=zh-cn P.S. 簡體版請自行更換下方語系 缺點: 因為是用純數字字元記載加密文件,所以容易看出規則破解,及會有容量倍數成長的問題 (VBS沒有VB這麼多涵式好用,這點請有興趣的網友自己試著改進 ^^||) 腳本可改良的地方很多 比如密碼可改成文字(不過加密後的文件size會變大,當然可以用壓縮算式,不過寫起來太累人了...^^||) 或加入解密密碼混和讀寫 或文字改成 byte進制檔來存取 還有執行方式有是...(要寫絕對路徑的判讀) 列表: List.bat (為列出此地路徑下的所有.txt檔,當然也可以自己更改搜尋條件 ※生成的列表檔為Crypt.List請勿更名) ===加密: Crypt.vbs=== Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fsot, ft Dim ValCrypt Dim BoolMsg On Error Resume Next ValCrypt = Cint(InputBox("請輸入加密密碼 ※需為大於等於100之正整數")) BoolMsg = MsgBox("是否指定單一文件加密(答""否""的話就是使用 Crypt.List批次處理)",vbYesNoCancel,"指定加密文件") If BoolMsg = vbNo Then Set fsot = CreateObject("Scripting.FileSystemObject") Set ft = fsot.OpenTextFile("Crypt.List", ForReading) While Not ft.AtEndOfStream ReadWriteFile ft.ReadLine Wend ElseIF BoolMsg = vbYes Then ReadWriteFile InputBox("請輸入File完整名稱") End IF On Error GoTo 0 Sub ReadWriteFile(FileNameStr) Dim fso, f1, f2, i Dim NewText, ReadAllTextFile Dim ValTristate Set fso = CreateObject("Scripting.FileSystemObject") Set f1 = fso.OpenTextFile(FileNameStr, ForReading, False, TristateUseDefault) Set f2 = fso.OpenTextFile(FileNameStr, ForReading, False, TristateTrue) ReadAllTextFile = f1.ReadAll NewText = f2.ReadAll If StrComp(ReadAllTextFile, NewText) Then ValTristate = TristateUseDefault '開啟檔案為系統預設狀態 Else ValTristate = TristateTrue 'Unicode End If f2.Close NewText = Empty ReadAllTextFile = StrReverse(ReadAllTextFile) For i = 1 to LenB(ReadAllTextFile) NewText = NewText + CStr(AscB(MidB(ReadAllTextFile, i, 1)) + ValCrypt) Next Set f1 = fso.OpenTextFile(FileNameStr + ".Crypt", ForWriting, True, ValTristate) f1.Write NewText End Sub ===List.bat === dir /b .\*.txt > Crypt.List |
送花文章: 2016,
|
2005-06-23, 10:05 AM | #2 (permalink) |
管理版主
|
===解密: Decode.vbs===
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0 Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim fsot, ft Dim ValCrypt Dim BoolMsg On Error Resume Next ValCrypt = Cint(InputBox("請輸入當初設定之文件解密密碼(正整數)")) BoolMsg = MsgBox("是否解密所有.Crypt文件(答""是""的話會根據Crypt.List文件列表;答""否""的話請輸入單一文件)",vbYesNoCancel,"指定解密文件") If BoolMsg = vbYes Then Set fsot = CreateObject("Scripting.FileSystemObject") Set ft = fsot.OpenTextFile("Crypt.List", ForReading, False, TristateUseDefault) While Not ft.AtEndOfStream ReadWriteFile ft.ReadLine, ValCrypt Wend ElseIF BoolMsg = vbNo Then ReadWriteFile InputBox("請輸入文件完整名稱"), ValCrypt End IF On Error GoTo 0 Sub ReadWriteFile(FileNameStr, ByValCrypt) Dim fso, f1, f2, i Dim NewText, ReadAllTextFile Dim ValTristate, ValLen Set fso = CreateObject("Scripting.FileSystemObject") Set f1 = fso.OpenTextFile(FileNameStr + ".Crypt", ForReading, False, TristateUseDefault) Set f2 = fso.OpenTextFile(FileNameStr + ".Crypt", ForReading, False, TristateTrue) ReadAllTextFile = f1.ReadAll NewText = f2.ReadAll If StrComp(ReadAllTextFile, NewText) Then ValTristate = TristateUseDefault '開啟檔案為系統預設狀態 Else ValTristate = TristateTrue 'Unicode End If f2.Close NewText = Empty ValLen = Len(CStr(ByValCrypt)) For i = 1 to Len(ReadAllTextFile) Step ValLen NewText = NewText + ChrB(CInt(Mid(ReadAllTextFile, i, ValLen))- ByValCrypt) Next NewText = StrReverse(NewText) Set f1 = fso.OpenTextFile("Decode_" + FileNameStr, ForWriting, True, ValTristate) f1.Write NewText End Sub |
送花文章: 2016,
|