VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

欲對JPG圖檔進行加密及解密,是否有可行的方法可提供參考?

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
小柯



註冊時間: 2003-11-27
文章: 75


第 1 樓

發表發表於: 星期三 五月 31, 2023 5:01 pm    文章主題: 欲對JPG圖檔進行加密及解密,是否有可行的方法可提供參考? 引言回覆

因考量資安風險,欲對大量掃瞄檔存的JPG圖檔進行加密/解密,請問先進是否有可行的方法提供參考,謝謝。
回頂端
檢視會員個人資料 發送私人訊息
小柯



註冊時間: 2003-11-27
文章: 75


第 2 樓

發表發表於: 星期四 六月 01, 2023 9:24 am    文章主題: 引言回覆

搜尋前文,先進garfield曾於2010年2月26日分享發表檔案加密的方法,如下:

* ? '加密成功否:',secretfile('我的檔案.doc')
* ? '解密成功否:',secretfile('我的檔案.doc', .T.)
FUNCTION secretfile
LPARAMETERS mfile , unsecret
IF AT(["],mfile)=0
mfile=["]+mfile+["]
endif
IF !FILE(mfile)
WAIT windows '找不到檔案:'+mfile nowait
RETURN .f.
ENDIF
LOCAL mh, mstat, mlen, mled, mret
mled = '檔案已加密'
Mh = FOPEN(mfile,12)
IF mh<1
WAIT windows '無法開啟檔案'+mfile nowait
RETURN .f.
ENDIF
mret = .f.
LOCAL mfilelen,mdata
DO case
case !unsecret .and. mled <> FREAD(mh,10)
mlen = FLOOR(RAND(0)*256)
mfilelen = FSEEK(mh,0,2)
FSEEK(mh,0,0)
mdata = FREAD(mh,mfilelen) &&--請注意: 應該會有檔案長度限制
FSEEK(mh,0,0)
mstat = FWRITE(mh,mled+CHR(mlen)+PADR(mdata,mlen) + mdata)
* 本方法無法加密純文字檔, 研發人員: garfield
* 加密原理: 改掉檔頭, 讓一些相關程式無法開啟
* 會加長檔案長度 11+最多255字
IF mstat<1
WAIT windows '無法加密'+mfile nowait
ELSE
mret = .t.
ENDIF
case unsecret
mstat = FREAD(mh,10)
IF mstat <> mled
WAIT windows '非用本方式加密' nowait
else
mlen = ASC(FREAD(mh,1))
mfilelen = FSEEK(mh,0,2)
FSEEK(mh,0,0)
mdata = FREAD(mh, mfilelen) &&--請注意: 應該會有檔案長度限制
FSEEK(mh,0,0)
mstat = FWRITE(mh,SUBSTR(mdata,11+mlen+1))
IF mstat<1
WAIT windows '無法解密'+mfile nowait
ELSE
mret = .t.
ENDIF
endif
ENDcase
FCLOSE(mh)
RETURN mret
------------------------------------------------------------------
以上範例測試64K以內的JPG檔案可行,唯一美中不足的是FREAD()函數有檔案長度65535位元組的限制,超過64K的檔案就無法加密了,甚為可惜!未知先進是否有改良的對策或其他替代方法賜教,感恩。
回頂端
檢視會員個人資料 發送私人訊息
CPS0204



註冊時間: 2014-08-24
文章: 441


第 3 樓

發表發表於: 星期五 六月 02, 2023 1:47 pm    文章主題: 引言回覆

可以使用mydll.dll

MYDLL.DLL 中包含以下函數
1 encstr 串加密/解密
2 getserial 獲取硬碟出廠序列號
3 IsWin2000 當前機器的作業系統
4 DPGetDefaultPrinter 獲取當前默認印表機
5 DPSetDefaultPrinter 設置當前默認印表機
6 getname 獲取當前用戶名
7 getip 獲取本機 IP
8 topy 漢字轉拼音頭
9 getmac 獲取機器 MAC
10 VolumeNumber 獲取磁片格式化時的卷標
11 changeres 改變顯示分辯率
12 getcrc 取得一個文件的 CRC 校驗值
13 IsConnected 判斷本機是否連接到 Internet
14 IsDiskInDrive 判斷軟碟驅動器中是否插有軟碟
15 num2txt_e 轉換一個數值型?大寫的金額串(英文)
16 num2txt_c 轉換一個數值型?大寫的金額串(中文)
17 pinghost Ping 一個主機位址
18 connecttonetwork 映射網路資源?一個本地驅動器, 封裝了 WNetUseConnection API
19 cancelconnect 斷開一個已經映射的網路資源 , 封裝了 WNetCancelConnection2 API
20 myftpputfile 從傳一個文件到指定的 ftp
21 myftpgetfile 從指定的 ftp 下載一個文件
22 httpdownload 從指定的 http 下載一個文件
23 getmetric 獲取系統顯示器當前的分辯率
24 sendmail 發送一個 email (可帶一個附件)
25 smail 通過 smtp 郵件伺服器發送一個 email (不需要本地的 OUTLOOK 等郵件程式,最多可帶四個附件)
26 PrintStringDirect 直接發送一個串到指定印表機,列印完後不會送紙
27 DialUp 撥號上網
28 DisconnectRas 斷開撥號
29 MD5File 用 md5 演算法求一個文件的 16 位檢查和 ( 感謝網友 goodfrd 提供源代碼 )
30 MD5String 用 md5 演算法求一個串的 16 位檢查和 ( 感謝網友 goodfrd 提供源代碼 )
31 compress 壓縮一個目錄中的所有文件到一個卷或多個卷中(不包括子目錄中的內容)
32 decompress 解壓一個經 compress 函數壓縮的文件中的所有內容到一個指定目錄中
33 MyInputBox 一個簡單的口令輸入框
34 InitUser 用於創建缺省的密鑰容器,在一台機器上只需運行一次,以?下面兩個函數作準備的函數
35 CAPIEncryptFile 加密一個文件
36 CAPIDecryptFile 解密一個文件

37 sharedel 設置一個本地驅動器或目錄?共用
38 shareadd 刪除共用
39 ShellExecWait 執行一個 DOS 命令 ( 感謝網友 goodfrd 提供源代碼 )
40 SetTime 設置一個目錄或文件的日期
41 vfpbeep 讓系統發出 "嘟" 聲
42 hzbh 獲取漢字筆劃
43 exitw 登出/關閉/重?系統
44 dirsize 獲取一個目錄的大小
45 getcpuid 獲取當前機器的 CPUID
46 tojpeg 轉換一個 BMP 文件到 JPG 文件
47 tobmp 轉換一個 JPG 文件到 BMP 文件
48 formtobmp 將表單或螢幕內容保存?一個點陣圖
49 getbmpdemension 獲取一個 BMP 文件的大小
50 getjpgdimension 獲取一個 JPG 文件的大小
51 LoadIME 設置特定的輸入法
52 getallproc 獲取當前系統中的所有進程
53 TerminateApp 終止一個 32 位元進程
54 Terminate16App 終止一個 16 位元進程
55 killtask 殺掉所有任務欄中的程式
56 ListMail 列出 POP 3 郵件伺服器上的郵件
回頂端
檢視會員個人資料 發送私人訊息
小柯



註冊時間: 2003-11-27
文章: 75


第 4 樓

發表發表於: 星期五 六月 02, 2023 5:07 pm    文章主題: 引言回覆

經實測mydll.dll可以成功加解密JPG檔(大於64K),感謝CPS0204提供。
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


註冊時間: 2003-01-30
文章: 2157


第 5 樓

發表發表於: 星期二 六月 06, 2023 10:04 am    文章主題: 引言回覆

如果是大量的檔案要加密,
可以像勒索病毒一樣,
只加密所有檔案的前面1024個字(或者更多)
這樣速度快多了.
如果連檔名都要改(這樣才能分辨出有那一些檔案是被加密過的),
那就要另外用一個table來記錄檔名.

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
小柯



註冊時間: 2003-11-27
文章: 75


第 6 樓

發表發表於: 星期二 六月 06, 2023 11:26 am    文章主題: 引言回覆

知悉,感謝garfield提供寶貴建議。
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作