PCC
Posted: 2006年2月11日(土) 16:21
ファイルの暗号化、復号化を行うコードを教えてください。
できれば暗号化 複合化を分けて、どちらかひとつでもかまいませんから。
できれば暗号化 複合化を分けて、どちらかひとつでもかまいませんから。
コード: 全て選択
Class CPassWord
Protected
c_nKey As Long
Public
Sub setPass(ByVal nKey As Long)
c_nKey=nKey
End Sub
Sub getPass() As Long
getPass=c_nKey
End Sub
Function encode(ByVal lpString As BytePtr) As BytePtr
Dim length As Long
Dim cnt As Long
length=lstrlen(lpString)
encode=calloc(length)
For cnt=1 To length
lstrcat(encode,Chr$( Asc(Mid$(lpString,cnt,1)) -c_nKey))
Next
End Function
Function decode(ByVal lpString As BytePtr) As BytePtr
Dim length As Long
Dim cnt As Long
length=lstrlen(lpString)
decode=calloc(length)
For cnt=1 To length
lstrcat(decode,Chr$( Asc(Mid$(lpString,cnt,1)) +c_nKey))
Next
End Function
End Class
Sub MainWnd_CommandButton1_Click()
Dim hEdit As HWND
Dim pStr[2] As BytePtr
Dim length As Long
Dim pass As CPassWord
pass.setPass(1)
hEdit=GetDlgItem(hMainWnd,EditBox1)
length=GetWindowTextLength(hEdit)+1
pStr[0]=calloc(length)
GetWindowText(hEdit,pStr[0],length)
pStr[1]=pass.encode(pStr[0])
MessageBox(hMainWnd,pStr[1],"暗号化",MB_OK)
pStr[2]=pass.decode(pStr[1])
MessageBox(hMainWnd,pStr[2],"復号化",MB_OK)
End Sub
コード: 全て選択
#include "LASRM_DLL.idx"
Dim rd As Long
Dim C(7) As Long
Dim CH(15) As Long
Dim CE(7) As Long
/*
'-------------------------------------------------------------------
メモ - インポートすべき関数は、次の3つです。
Function SetCH(CH$ As BytePtr) As Long
説明:http://web1.nazca.co.jp/hp/himajinn13se ... ドを設定してください。
返り値・・・エラー(-1)、正常(0)、注意(1)
Function Angoka(InpFileName As BytePtr,Password As BytePtr,OutFileName As BytePtr) As Long
説明:第一パラメータ・・・入力元ファイル名
第二パラメータ・・・暗号化時のパスワード
第三パラメータ・・・出力先ファイル名
返り値・・・入力元ファイルのファイルサイズ
注意・・・第一パラメータと第三パラメータは同じ値を使用しないで下さい。
Function Export Hukugoka(InpFileName As BytePtr,Password1 As BytePtr,OutFileName As BytePtr) As Long
説明:第一パラメータ・・・入力元ファイル名
第二パラメータ・・・復号化時のパスワード
第三パラメータ・・・出力先ファイル名
返り値・・・入力元ファイルのファイルサイズ
またはエラー値(-1)
注意・・・第一パラメータと第三パラメータは同じ値を使用しないで下さい。
'-------------------------------------------------------------------
*/
Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long
'DLLエントリポイント
Select Case fdwReason
Case DLL_PROCESS_ATTACH
'DLLがプロセス空間にロードされた時に実行されます。
_System_StartupProgram()
DllMain=1
End Select
End Function
Function Export SetCH(CH$ As BytePtr)
SetCH=CHC_CH(CH$,CH)
End Function
Function Pass_C(A$ As String,ByRef B(7) As Long)
Dim I As Long
For I=0 To 7
B(I)=Asc(He(A$,I+1))
Next I
End Function
Function Head(A$ As String) As Long
Dim B$ As String
B$=Mid$(A$,1,1)
Head=Val(B$) As Long
End Function
Function He(A$ As String,B As Long) As String
He=Mid$(A$,B,1)
End Function
Function CHC_CH(A$ As String,ByRef B(15) As Long) As Long
Dim I As Long
Dim H As Long
CHC_CH=0
H=Head(A$)
if H=2 then
For I=0 To 15
B(I)=C62(He(A$,I*2+2))*62+C62(He(A$,I*2+3))
Next I
CHC_CH=1
End If
if H=3 then
For I=0 To 15
B(I)=C62(He(A$,I*3+2))*62*62+C62(He(A$,I*3+3))*62+C62(He(A$,I*3+4))
Next I
CHC_CH=1
End If
if H=4 then
For I=0 To 15
B(I)=C62(He(A$,I*4+2))*62*62*62+C62(He(A$,I*4+3))*62*62+C62(He(A$,I*4+4))*62+C62(He(A$,I*4+5))
Next I
CHC_CH=1
End If
if H=5 then
For I=0 To 15
B(I)=C62(He(A$,I*5+2))*62*62*62*62+C62(He(A$,I*5+3))*62*62*62+C62(He(A$,I*5+4))*62*62+C62(He(A$,I*5+5))*62+C62(He(A$,I*5+6))
Next I
CHC_CH=1
End If
If Len(A$)<>H*16+1 then CHC_CH=2
CHC_CH=CHC_CH-1
End Function
Function C62(A$ As String) As Long
Dim A As Long
If A$="1" then A=0
If A$="2" then A=1
If A$="3" then A=2
If A$="4" then A=3
If A$="5" then A=4
If A$="6" then A=5
If A$="7" then A=6
If A$="8" then A=7
If A$="9" then A=8
If A$="0" then A=9
If A$="q" then A=10
If A$="w" then A=11
If A$="e" then A=12
If A$="r" then A=13
If A$="t" then A=14
If A$="y" then A=15
If A$="u" then A=16
If A$="i" then A=17
If A$="o" then A=18
If A$="p" then A=19
If A$="a" then A=20
If A$="s" then A=21
If A$="d" then A=22
If A$="f" then A=23
If A$="g" then A=24
If A$="h" then A=25
If A$="j" then A=26
If A$="k" then A=27
If A$="l" then A=28
If A$="z" then A=29
If A$="x" then A=30
If A$="c" then A=31
If A$="v" then A=32
If A$="b" then A=33
If A$="n" then A=34
If A$="m" then A=35
If A$="Q" then A=36
If A$="W" then A=37
If A$="E" then A=38
If A$="R" then A=39
If A$="T" then A=40
If A$="Y" then A=41
If A$="U" then A=42
If A$="I" then A=43
If A$="O" then A=44
If A$="P" then A=45
If A$="A" then A=46
If A$="S" then A=47
If A$="D" then A=48
If A$="F" then A=49
If A$="G" then A=50
If A$="H" then A=51
If A$="J" then A=52
If A$="K" then A=53
If A$="L" then A=54
If A$="Z" then A=55
If A$="X" then A=56
If A$="C" then A=57
If A$="V" then A=58
If A$="B" then A=59
If A$="N" then A=60
If A$="M" then A=61
C62=A
End Function
Function Export Angoka(InpFileName As BytePtr,Password As BytePtr,OutFileName As BytePtr) As Long
Dim FileLof As Long
Dim A As Long
Dim A3 As Long
Dim I As Long
Dim A$ As String
Dim J As Long
Dim Head As String
Dim HeadSize=4+8 As Byte
Dim HeadEdit(7) As Long
Pass_C(Password,C)
Open InpFileName As #1
Field #1,1
FileLof=Lof(1)
Open OutFileName As #2
Field #2,4
'ヘッダの出力
Head="LA2"'ファイル分類
Head=Head+Chr$(HeadSize)'ヘッダの総サイズ
Put #2,1,Head
Field #2,1
For I=0 To 7
HeadEdit(I)=Int(Rnd()*256)
CE(I)=HeadEdit(I)
Next I
For I=0 To 7
HeadEdit(I)=(HeadEdit(I)+CNext()) Mod 256
A$=Chr$(HeadEdit(I) As Byte)
Put #2,I+5,A$
Next I
For I=1 To FileLof
Get #1,I,A$
A=Asc(A$)
A=(A+CNext2()) Mod 256
A$=Chr$(A As Byte)
J=I+HeadSize
Put #2,J,A$
Next I
Close #1
Close #2
Angoka=FileLof
End Function
Function Export Hukugoka(InpFileName As BytePtr,Password1 As BytePtr,OutFileName As BytePtr) As Long
Dim FileLof As Long
Dim A As Long
Dim A3 As Long
Dim I As Long
Dim A$ As String
Dim J As Long
Pass_C(Password1,C)
Open InpFileName As #1
Field #1,1
Open OutFileName As #2
Field #2,1
Field #1,3
Get #1,1,A$
'ファイル属性のチェック
if A$(0)=Asc("L") and A$(1)=Asc("A") and A$(2)=Asc("2") then'新版
Field #1,12
Get #1,1,A$
For I=0 To 7
CE(I)=(A$(I+4)-CNext()+65536) Mod 256
Next I
Field #1,1
FileLof=Lof(1)-12
For I=1 To FileLof
J=I+12
Get #1,J,A$
A=Asc(A$)
A=(A-CNext2()+65536) Mod 256
A$=Chr$(A As Byte)
Put #2,I,A$
Next I
Else
Close #1
Close #2
Hukugoka=-1
End If
Close #1
Close #2
Hukugoka=FileLof
End Function
Function CNext() As Long
C(0)=(C(0)+C(1)) Mod CH(0)
C(1)=(C(1)-C(2)+CH(1)) Mod CH(1)
C(2)=(C(2)+C(3)) Mod CH(2)
C(3)=(C(3)-C(4)+CH(3)) Mod CH(3)
C(4)=(C(4)+C(5)) Mod CH(4)
C(5)=(C(5)-C(6)+CH(5)) Mod CH(5)
C(6)=(C(6)+C(7)) Mod CH(6)
C(7)=(C(7)-C(0)+CH(7)) Mod CH(7)
C(0)=(C(0)-C(1)+CH(8)) Mod CH(8)
C(1)=(C(1)+C(2)) Mod CH(9)
C(2)=(C(2)-C(3)+CH(10)) Mod CH(10)
C(3)=(C(3)+C(4)) Mod CH(11)
C(4)=(C(4)-C(5)+CH(12)) Mod CH(12)
C(5)=(C(5)+C(6)) Mod CH(13)
C(6)=(C(6)-C(7)+CH(14)) Mod CH(14)
C(7)=(C(7)+C(0)) Mod CH(15)
CNext=C(0)
End Function
Function CNext2() As Long
C(0)=(C(0)+C(1)) Mod CH(0)
C(1)=(C(1)-C(2)+CH(1)) Mod CH(1)
C(2)=(C(2)+C(3)) Mod CH(2)
C(3)=(C(3)-C(4)+CH(3)) Mod CH(3)
C(4)=(C(4)+C(5)) Mod CH(4)
C(5)=(C(5)-C(6)+CH(5)) Mod CH(5)
C(6)=(C(6)+C(7)) Mod CH(6)
C(7)=(C(7)-CE(0)+CH(7)) Mod CH(7)
CE(0)=(CE(0)+CE(1)) Mod (CH(0)+CH(1))
CE(1)=(CE(1)-CE(2)+CH(2)+CH(3)) Mod (CH(2)+CH(3))
CE(2)=(CE(2)+CE(3)) Mod (CH(4)+CH(5))
CE(3)=(CE(3)-CE(4)+CH(6)+CH(7)) Mod (CH(6)+CH(7))
C(0)=(C(0)-C(1)+CH(8)) Mod CH(8)
C(1)=(C(1)+C(2)) Mod CH(9)
C(2)=(C(2)-C(3)+CH(10)) Mod CH(10)
C(3)=(C(3)+C(4)) Mod CH(11)
C(4)=(C(4)-C(5)+CH(12)) Mod CH(12)
C(5)=(C(5)+C(6)) Mod CH(13)
C(6)=(C(6)-C(7)+CH(14)) Mod CH(14)
C(7)=(C(7)+C(0)) Mod CH(15)
CE(4)=(CE(4)+CE(5)) Mod (CH(8)+CH(9))
CE(5)=(CE(5)-CE(6)+CH(10)+CH(11)) Mod (CH(10)+CH(11))
CE(6)=(CE(6)+CE(7)) Mod (CH(12)+CH(13))
CE(7)=(CE(7)-C(0)+CH(14)+CH(15)) Mod (CH(14)+CH(15))
CNext2=C(0)
End Function