VISUALBASIC の RND() 関数には重要な機能があります。RND() のパラメータ (ここではシードと呼ぶことができます) が負の値の場合、同じシード (負の値) が同じ乱数列を生成します。同時に、VISUALBASIC は強力なバイナリ テクノロジ機能も備えているため、次の考え方に従ってファイル コンテンツの暗号化を実現できます。
X=RND(-KEY)
'KEY は正の数です
VAULE=INT(256*RND)'乱数を生成します (これをパスワードとして使用します)
OpenFILENAME$ForBinaryAs#FILENUM'ファイルを開く
Get#FILENUM,I,A'ファイルの内容を取得
B=AXORVAULE'暗号化されたファイルを取得
組み合わせる
C=BXORVAULE' は復号化されたファイルを取得します (B は暗号化されたファイルの内容です)
注: ここでの は、ファイルの内容全体ではなく、非常に小さな部分、数バイト、または 1 バイトの場合もあり、ファイル内の各バイトは異なる数値と XOR 演算されます。解読が難しい。具体的なプロセス:
SubENDECODE(FILENAME$,MA,FILE2$)' パラメータは次のとおりです: ソース ファイル、パスワード、ターゲット ファイル
DimFILENUMAsInteger、XAsSingle、IAsSingle
DimCHARNUMAsInteger,RANDOMINTEGERAsInteger
DimSINGLECHARAsString*1,filen2AsInteger' は 1 バイトを使用します
IfMA<0彼ら
MA=MA*(-1)
EndIf
X=Rnd(-MA)'パラメータが負です
FILENUM=フリーファイル
OpenFILENAME$ForBinaryAs#FILENUM'ソース ファイルをバイナリ モードで開く
filen2=フリーファイル
OpenFILE2$ForOutputAs#filen2'ターゲット ファイルをシーケンシャル ファイルで開きます
ForI=1ToLOF(FILENUM)'LOF() ファイルの長さ (バイト単位)
Get#FILENUM,I,SINGLECHAR'シングルバイトコンテンツを取得
CHARNUM=Asc(SINGLECHAR)
RANDOMINTEGER=Int(256*Rnd)'アルファベットを取得
CHARNUM=CHARNUMXorRANDOMINTEGER'XOR
PRint#filen2,Chr$(CHARNUM);'ターゲット ファイルに書き込みます
次へ私
閉じるファイル番号
閉じるファイル2
ok' は成功ダイアログ ボックスを呼び出します
EndSub
呼び出し形式:ENDECODEソースファイル名、パスワード、ターゲットファイル名
上記処理は、さらに複数のランダム処理などを施すと、EXE、COM、テキスト等の任意のファイルを暗号化・復号化(奇数回、偶数回)することができ、再現性と機密性に優れます。 , その後、さらに高いレベルに進みますが、ここでは繰り返しません。
ちなみに、上記のプロセスでターゲット ファイルを開いてバイナリ ファイルとして書き込む場合、純粋な西洋のテキストのみを暗号化および復号化できます。純粋な中国語のテキストについては、2 バイトを取るように変更され、I のステップ サイズは次のようになります。 2. 実装、その他(中国語と西洋の組み合わせテキスト、EXE、COM およびその他のファイル)では、期待した結果が得られません。その理由は、ASCII が 127 を超える文字を正常に表示できないこと、およびファイルを正常に書き込むことができないことが考えられます。 put文(結果はスペースだけ)ですが、興味のある方は試してみると良いかもしれません。
->