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

[原創]字串加密的方法.
前往頁面 1, 2  下一頁
 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
garfield
Site Admin


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


第 1 樓

發表發表於: 星期六 十月 25, 2003 1:06 pm    文章主題: [原創]字串加密的方法. 引言回覆

使用範例:
mfilestr = garablestr( filetostr('my.dbf') ,'MyPassowrd')
strtofile( mfilestr, 'my.dbf')


******** 修正過後的版本. 2005.03.12
func garablestr
lpara mstr , mpassword
* 執行一次會加密, 再將加密過的字串傳來執行一次會解密
local i, mret, mpos
dime apassword[ len(mpassword)*2 ]
for i=1 to len(mpassword)
apassword[ i*2-1 ] = int(asc( subs( mpassword,i,1))/16)
apassword[ i*2 ] = asc( subs( mpassword,i,1)) - apassword[ i*2-1 ]*16
next

mret = ''
for i=1 to len( mstr )
mpos = mod( i , alen( apassword ) )+1
mret = mret + bytexor( subs( mstr, i,1) , apassword[ mpos ] )
next
return mret
**************************
func bytexor &&--可用於加密
lpara mbyte, mbit
* 例: ? bytexor('A', 15 ) &&-- show chr(190)
* ? bytexor( chr(190) , 15 ) &&-- show 'A'
* mbyte = 一個英文字
* mbit = 一個16進位的數字 0 到 15
local mbit1,mbit2
mbit1 = int( asc( mbyte )/16)
mbit2 = asc( mbyte ) - mbit1*16
*? mbit1,mbit2 , chr( mbit1*16+mbit2 )
return chr( bitxor( mbit1, mbit ) * 16 + bitxor( mbit2,mbit ) )

_________________
利用>>搜尋<<的功能會比問的還要快得到答案.


garfield 在 星期六 三月 12, 2005 8:55 pm 作了第 1 次修改
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
elleryq



註冊時間: 2007-06-21
文章: 768


第 2 樓

發表發表於: 星期六 十月 25, 2003 2:08 pm    文章主題: 引言回覆

這是利用雜湊 + xor 的方式加密嗎??
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
garfield
Site Admin


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


第 3 樓

發表發表於: 星期日 十月 26, 2003 5:29 am    文章主題: 引言回覆

應該沒雜湊(沒讀晝,不知雜湊是啥) , 只是依序將每個字串與密碼一個一個的XOR, 如要再加密深一點, 就將密碼執行本程式一次後(將密碼加密), 再作加密的動作.
func garablestrpwd
lpara mstr , mpassword
return garablestr( mstr , garablestr( mpassword,'看不懂了吧!') )
*******************************
*如果還要再加密深一點, 可以使用非線性加密碼(朋友跟我提過的加密方法), 這個就稍為複雜點了, 可能要經過一番解密過程才會知道結果, 有與趣, 我們再討論.

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



註冊時間: 2007-06-21
文章: 768


第 4 樓

發表發表於: 星期一 十月 27, 2003 8:58 am    文章主題: 引言回覆

講錯了~
不是 hash 雜湊啦~
一時"手"快
:p
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
志明



註冊時間: 2003-10-27
文章: 30


第 5 樓

發表發表於: 星期一 十月 27, 2003 11:15 am    文章主題: 引言回覆

我測試時,找不到 bytexor ,這個是要自已寫嗎?還是vfp 內建?
回頂端
檢視會員個人資料 發送私人訊息 雅虎訊息通
garfield
Site Admin


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


第 6 樓

發表發表於: 星期一 十月 27, 2003 2:14 pm    文章主題: 引言回覆

哦! , 忘了還有這個函數, VFP可用BITXOR() 沒有 bytexor( ).
**************************
func bytexor &&--可用於加密
lpara mbyte, mbit
* 例: ? bytexor('A', 15 ) &&-- show chr(190)
* ? bytexor( chr(190) , 15 ) &&-- show 'A'
* mbyte = 一個英文字
* mbit = 一個16進位的數字 0 到 15
local mbit1,mbit2
mbit1 = int( asc( mbyte )/16)
mbit2 = asc( mbyte ) - mbit1*16
*? mbit1,mbit2 , chr( mbit1*16+mbit2 )
return chr( bitxor( mbit1, mbit ) * 16 + bitxor( mbit2,mbit ) )

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


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


第 7 樓

發表發表於: 星期一 三月 07, 2005 10:59 pm    文章主題: 引言回覆

看起來像是這一行有問題
mpos = mod( mpos , alen( apassword ) )+1
應該是
mpos = mod( i , alen( apassword ) )+1
因為我的用意是用每一個加密的keyword , 每一個byte分成兩個數字, 循環對映到須加密的字串( mstr )
* 正確的程式如下
************
func garablestr
lpara mstr , mpassword
* 執行一次會加密, 再將加密的檔案來執行一次會解密
local i, mret, mpos
dime apassword[ len(mpassword)*2 ]
for i=1 to len(mpassword)
apassword[ i*2-1 ] = int(asc( subs( mpassword,i,1))/16)
apassword[ i*2 ] = asc( subs( mpassword,i,1)) - apassword[ i*2-1 ]*16
next

mret = ''
for i=1 to len( mstr )
mpos = mod( i , alen( apassword ) )+1
mret = mret + bytexor( subs( mstr, i,1) , apassword[ mpos ] )
next
return mret

**************
如果是針對整個檔案要加密可以利用 filetostr() 及 strtofile()
例:
func garablefile
lpara mfile, mpassword
local mstr
mstr = garablestr( filetostr( mfile) , mpassword )
return strtofile( mstr , mfile )

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



註冊時間: 2004-09-17
文章: 357


第 8 樓

發表發表於: 星期六 三月 12, 2005 11:03 am    文章主題: dbf加密解密時錯誤!請協助! 引言回覆

按鈕事件

UGET=GETFILE("dbf","請注意 選擇要轉入 BOM 的資料","轉 入")
IF EMPT(UGET)=.F.
a=5
加密(uget,a)
endif


加密.prg



**************
&&如果是針對整個檔案要加密可以利用 filetostr() 及 strtofile()
&&例:
&&func garablefile
&&lpara mfile, mpassword
&&local mstr
&&mstr = garablestr( filetostr( mfile) , mpassword )
&&return strtofile( mstr , mfile )

&&func garablestr
lpara mstr , mpassword
* 執行一次會加密, 再將加密的檔案來執行一次會解密
local i, mret, mpos
dime apassword[ len(mpassword)*2 ]

for i=1 to len(mpassword)
apassword[ i*2-1 ] = int(asc( subs( mpassword,i,1))/16)
apassword[ i*2 ] = asc( subs( mpassword,i,1)) - apassword[ i*2-1 ]*16
next

mret = ''
for i=1 to len( mstr )
mpos = mod( i , alen( apassword ))+1
mret = mret + bitxor( subs( mstr, i,1) , apassword[ mpos ] )
next
return mret

執行時發生錯誤
1.無bytexor 而改 bitxor
2.型態或數目不對 mret = mret + bitxor( subs( mstr, i,1) , apassword[ mpos ] )

我是將希望 員工基本資料(dbf) 能解密,匯入,運算,回存,加密的運作
以上進請先進指正!謝謝!
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


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


第 9 樓

發表發表於: 星期六 三月 12, 2005 11:10 am    文章主題: 引言回覆

引言回覆:

執行時發生錯誤
1.無bytexor 而改 bitxor
2.型態或數目不對 mret = mret + bitxor( subs( mstr, i,1) , apassword[ mpos ] )


1.bytexor的程式我放在這個主題的第6樓
2.因為你改用了bitxor而造成的.

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



註冊時間: 2004-09-17
文章: 357


第 10 樓

發表發表於: 星期六 三月 12, 2005 2:07 pm    文章主題: 引言回覆

修正 bytexor 後執行
並無錯誤訊息出現(password為 'a'正常,但為5數字時出現數目或型態不正確)
但我的資料表格內的資料卻也沒加密(亂碼)
請指正!謝謝!
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


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


第 11 樓

發表發表於: 星期六 三月 12, 2005 8:59 pm    文章主題: 引言回覆

您有2個問題嗎 ?
1.意思是用'a'當密碼時, 資料表格內的資料沒加密
2.用數字5當密碼, 會出現錯誤? <--- 你看到別人用過數字型態的變數來做字串加密的嗎?

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



註冊時間: 2004-09-17
文章: 357


第 12 樓

發表發表於: 星期六 三月 12, 2005 10:26 pm    文章主題: 引言回覆

我用您上面的prg是已經成功的檔案(dbf)加密解密!
但下午我想了又想,萬一使用者手癢用xls將檔案打開來看亂碼長成怎樣?
而碰到存檔不成功,檔案鎖住(需要重開機),此時再去解碼鎖碼就會出現,檔案使用中的保護警告
我有點煩惱?因為要執行薪資計算的人是財務協理,做事很龜毛,她一定會去看檔案的
有何好對策?請建議!謝謝!
回頂端
檢視會員個人資料 發送私人訊息
garfield
Site Admin


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


第 13 樓

發表發表於: 星期日 三月 13, 2005 5:35 pm    文章主題: 引言回覆

將加密過的檔案隱藏起來, 要看只能用你的程式解碼後才能自己去開啟.
將加密過的檔案存在你的table.memo欄位, 要看的時便解密到檔案去.

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



註冊時間: 2004-05-11
文章: 909


第 14 樓

發表發表於: 星期三 六月 14, 2006 1:23 pm    文章主題: 引言回覆

good 給你一百分!!正好需要到
_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
goto-dream



註冊時間: 2004-05-11
文章: 909


第 15 樓

發表發表於: 星期三 二月 24, 2010 11:06 am    文章主題: 引言回覆

對於 中文 會有誤判情況發生!!

感謝提供

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
前往頁面 1, 2  下一頁
1頁(共2頁)

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


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