RelaxToolsの機能に「ファイルの暗号化/複合化」がありましたがあまりにもしょぼいので「ファイルの難読化」に変更しました(v3.11)。
この機能はもともとプログラムの設定ファイルを読めなくする用途で作成されておりまして、プログラムがないといまいち機能でしたので公開いたします。
昔Yah○○!メッセンジャーというものがあり、放送禁止用語がテキストファイルで一緒にインストールされていて、これ難読化ぐらいしておけばいいのになぁ~と思ったことがあります。
用途としては、
1.プログラムの外部に一般の方に見せたくないファイルがあれば事前にRelaxToolsで難読化して配布。
2.プログラム中で難読かを解除してファイルを読み込む。
という感じです。
で、なぜ、1つの関数で難読化と解除が行えるかというと、キー値をXORで演算しているからです。
XORは2度実行すると元にもどる演算となります。
'--------------------------------------------------------------
' ファイルの難読化
' バッファ読み込み対応(2GB以下)
'--------------------------------------------------------------
Sub encryptionFileEx()
Dim strFile As String
Dim intIn As Integer
Dim intOut As Integer
Dim lngSize As Long
Dim i As Long
Dim bytBuf() As Byte
Dim lngRead As Long
Const key As Byte = &H44
Const C_BUFFER_SIZE = 10485760 '10MB
Const C_TEMP_FILE_EXT As String = ".tmp"
On Error GoTo ErrHandle
strFile = Application.GetOpenFilename(, , "ファイルの難読化", , False)
If strFile = "False" Then
'ファイル名が指定されなかった場合
Exit Sub
End If
'ファイルの存在チェック
If rlxIsFileExists(strFile) Then
Else
MsgBox "ファイルが存在しません。", vbExclamation, C_TITLE
Exit Sub
End If
intIn = FreeFile()
Open strFile For Binary As intIn
intOut = FreeFile()
Open strFile & C_TEMP_FILE_EXT For Binary As intOut
lngSize = LOF(intIn)
Do While lngSize > 0
If lngSize < C_BUFFER_SIZE Then
lngRead = lngSize
Else
lngRead = C_BUFFER_SIZE
End If
'最大で10MBのメモリを確保。
ReDim bytBuf(0 To lngRead - 1)
'確保したバイト数分読み込み
Get intIn, , bytBuf
'なんちゃって暗号化
For i = 0 To lngRead - 1
bytBuf(i) = bytBuf(i) Xor key
Next
'結果を書き込む
Put intOut, , bytBuf
lngSize = lngSize - lngRead
Loop
Close intIn
Close intOut
Kill strFile
Name strFile & C_TEMP_FILE_EXT As strFile
MsgBox "簡易暗号化/復号化が完了しました。", vbInformation, C_TITLE
Exit Sub
ErrHandle:
MsgBox "エラーが発生しました。", vbOKOnly, C_TITLE
End Sub









最近のコメント