白黒画像のファイルを暗号化します

Hi%user%! ある退屈な夜、私は何かをしたかった。 テキストエンコーダーは、私の頭に浮かんだ最初のものです。 しかし、彼が準備ができたとき、彼は任意のファイルを暗号化できることが判明しました! この例では、ファイルサイズの制限があります。 200 kbを超えるファイルはフィードしないでください。 スクリプトをPHPで作成します。





アイデア



暗号化:ファイルの内容を読み取り、0と1に変換し、数値をピクセルに変換してファイルに書き込みます。

復号化:ファイルを読み取り、各ピクセルの色を決定し、0と1を取得して、テキストを取得してファイルに書き込みます。



さあ始めましょう!



まず、いくつかのユーティリティ関数を作成します。

関数 readln (){

$ stdin = fopen ( 'php:// stdin' 、 'r' );

return trim ( fread ( $ stdin 、 2048 ));

}



関数 ascii_decrypt ( $ encryptedtext )

{

$ encryptedtext = str_replace ( '' 、 '' 、 $ encryptedtext );

$ encryptedtext = str_replace ( " \ n " 、 '' 、 $ encryptedtext );

$ encryptedtext = str_replace ( " \ r " 、 '' 、 $ encryptedtext );



$ blockstack = str_split ( $ encryptedtext 、 8 );

$ plaintext = "" ;

while ( list ( $ key 、 $ val ) = each ( $ blockstack ))

{

$ plaintext 。= bin2ascii( $ val );

}

$ plaintextを 返します。

}



関数 ascii_encrypt ( $ plaintext )

{

$ plaintextlength = strlen ( $ plaintext );

$ i = 0 ;

for ( $ x = 0 ; $ x < $ plaintextlength ; $ x ++ )

{

$ pt 。= ascii2bin( $ plaintext [ $ x ]);

// $ encryptedtext。= "";

}

$ ptを 返します。

}



関数 ascii2bin ( $ char )

{

$ char = decbin ( ord ( $ char ));

$ char = str_pad ( $ char 、 8 、 '0' 、STR_PAD_LEFT);

$ charを 返します。

}



関数 bin2ascii ( $ binary )

{

$ char = substr ( $ binary 、 $ x 、 8 );

$ char = chr ( bindec ( $ char ));

$ charを 返します。

}





説明します。

readln()関数は、コマンドラインから入力テキストを読み取ります。 ascii_encrypt()はテキストを0と1に変換し、 ascii_decrypt()はその逆を行います。 ascii2bin()は 、文字を8個のゼロと1のシーケンスに変換し、もちろんbin2ascii()は、逆のアクションを実行します。



今、主なことは暗号化と復号化です。 コードはすでに十分にコメントされているため、説明しません。



暗号化する


echo "入力ファイル:" ;

$ fl = readln( $ fl );



if ( file_exists ( $ fl )) $ file = stripslashes ( file_get_contents ( $ fl )); else die ( "入力ファイルが見つかりません! \ n " );

// header( 'Content-Type:image / png');



//ファイルの内容をゼロと1に変換します...

//そして、何らかの理由でそれを裏返します)

$ e = strrev (ascii_encrypt( $ file ));



////画像の高さと幅を計算する簡単なコード

$ l = strlen ( $ e );

$ h = floor ( sqrt ( $ l ));

while ( $ l % $ h !== 0 ) $ h- ;

$ w = $ l / $ h ;

//一度に1つのキャラクター全体を壊します

$ wordDot = str_split ( $ e 、 1 );



$ line = 0 ;

$列 = 0 ;



$ image = imagecreate ( $ w 、 $ h );

$ black = imagecolorallocate ( $ image 、 0、0、0 ); //黒色を定義します

$ white = imagecolorallocate ( $ image 、 255、255、255 ); //白

foreach ( $ wordDot as $ val )

{

// 0の場合、白色点を染色し、1の場合-黒

if ( $ val == 0 ) imageline ( $ image 、 $ column 、 $ line 、 $ column 、 $ line 、 $ white );

else imageline ( $ image 、 $ column 、 $ line 、 $ column 、 $ line 、 $ black );

if ( $ column == $ w -1 ){ $ line ++ ; $列 = -1 ;}

$カラム ++ ;



}



//結果を保存します

imagepng ( $ image 、 ' ./'。$ fl 。 '.png' );

imagedestroy ( $ image );





解読


echo "入力ファイル:" ;

$ fly = readln();

if ( file_exists ( $ fly )) $ image = imagecreatefrompng ( $ fly ); それ以外の場合 ( "ファイルが見つかりません! \ n " );



//画像の幅と高さを計算します

$ w = imagesx ( $ image );

$ h = imagesy ( $ image );

// Bはその中のピクセル数です(S = a * b)

$ wh = $ w * $ h ;

$ x = 0 ;

$ y = 0 ;



for ( $ t = 0 ; $ t < $ wh ; $ t ++ )

{

//ポイントの色を定義します。

$ rgb = imagecolorat ( $ image 、 $ x 、 $ y );

$ colors = imagecolorsforindex ( $ image 、 $ rgb );

$ cl = $ colors [ 'red' ] 。 $ colors [ 'green' ] 。 $カラー [ 'blue' ];

//白の場合、0を設定し、黒の場合-1

if ( $ cl == '255255255' ) $ binary 。= '0' ;

if ( $ cl == '000' ) $ binary 。= '1' ;

if ( $ x == $ w -1 ){ $ y ++ ; $ x = -1 ;}

$ x ++ ;

}

//反転してテキストに変換します

$ dt = ascii_decrypt( strrev ( $ binary ));

//ファイルに書き込みます

file_put_contents ( str_replace ( '.png' 、 '' 、 $ fly )、 $ dt );





打ち上げ



PHPインタープリターがインストールされている必要があります。

Linux(Unix):



Windows:





おわりに



すべてのコードを断片的に収集するのが面倒なら、 ここにその全体があります。



このコードは、完全な暗号化にはまだ適していません。 そこで、 数十度の暗号化を追加できます。ソルトの追加、圧縮、すべてをモールス符号または漢字に変換します。 それはあなたの巧妙さの倒錯の程度に依存します。 大きなファイルを暗号化できるように取り組んでいます。 すぐに暗号化サービスを開始したいです。

以上で、Habréでお会いしましょう! 私のブログをチェックしてください!



PS。 実行可能ファイルを暗号化すると、美しい画像が得られます。

XLiveAchiever.asi





MD5Inside.exe





PPS このメッセージを解読します;)

,    ;)







All Articles