史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-06-23, 10:05 AM   #1
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時
註冊日期: 2002-12-07
文章: 13279
精華: 0
現金: 26307 金幣
資產: 3024127 金幣
預設 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
mini 目前離線  
送花文章: 2003, 收花文章: 7967 篇, 收花: 26765 次
回覆時引用此帖
舊 2005-06-23, 10:05 AM   #2 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時
註冊日期: 2002-12-07
文章: 13279
精華: 0
現金: 26307 金幣
資產: 3024127 金幣
預設

===解密: 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
mini 目前離線  
送花文章: 2003, 收花文章: 7967 篇, 收花: 26765 次
回覆時引用此帖
舊 2005-06-23, 10:13 AM   #3 (permalink)
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時級別:96 | 在線時長:9741小時 | 升級還需:56小時
註冊日期: 2002-12-07
文章: 13279
精華: 0
現金: 26307 金幣
資產: 3024127 金幣
預設

原理還是簡單解說一下

一開始會要求輸入 密碼

再來
不論加密還是解密,都有兩個模式
一為 單一檔案
一為 處理 Crypt.List

選好後
就進入 加/解密 副程式處理

副程式內一開始做了 UTF-8、UniCode、ANSI 之文檔字碼判斷
知道是哪種文檔字碼後再以相對應的開檔模式
開啟->處理->存檔
mini 目前離線  
送花文章: 2003, 收花文章: 7967 篇, 收花: 26765 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 10:16 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1