2

PHP で暗号化および復号化機能を実装しようとしていますが、正しく機能していません。アルゴリズムは次のとおりです。

  • 暗号化キーはマスター コードです: 1234567890
  • 暗号化アルファベットはa-z, A-Z, 0-9, =
  • 暗号化アルファベットに属する署名の後の各記号を暗号化します。他は飛ばしてください。
  • シンボルは、暗号化されたアルファベットのシフト (右へ) によって暗号化されます。シフト量は、暗号化キーの現在の桁によって与えられます。暗号化キーの現在の桁は、使用するたびに右にシフトされ、最後から最初に循環します。

これが私の現在のコードです:

    function tnsencrypt($master_code,$text) { //the text to be encrypted $plain_text= $text;

//letters of alphabet array $alphabet=array('0','1','2','3','4','5','6','7','8','9','=','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

//$alphabet_len = count($alphabet); //$signature_len = 17; // signature=TnpMsgE //$master_code_len = 10; $mcursor = 0;

//positions of the letters in alphabet : The array_flip() function returns an array with all the original keys as values, and all original values as keys. $flip=array_flip($alphabet); //plaintext array $plain_text=str_split($plain_text); $master_code=str_split($master_code);

$n=count($plain_text); $encrypted_text=''; for ($i=0; $i }

}

//echo $encrypted_text; return $encrypted_text; }

function tnsdecrypt($master_code,$text) { //the text to be decrypted $encrypted_text= $text;

//letters of alphabet array $alphabet=array('0','1','2','3','4','5','6','7','8','9','=','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'); //positions of the letters in alphabet : The array_flip() function returns an array with all the original keys as values, and all original values as keys. $flip=array_flip($alphabet);

//plaintext array $encrypted_text=str_split($encrypted_text); $master_code=str_split($master_code);

$n=count($encrypted_text); $decrypted_text=''; for ($i=0; $i

} else {
    $decrypted_text.= $encrypted_text[$i];  
}
//move mcursor
$mcursor = ($mcursor+1)%10;
}

//echo $encrypted_text; return $decrypted_text;

}

if(isset($_POST["text"])) { $text = $_POST["text"]; $shifttext = $_POST["shifttext"]; echo "
Encrypted Text: ".tnsencrypt($shifttext,$text); echo "
Decrypted Text: ".tnsdecrypt($shifttext,tnsencrypt($shifttext,$text));

}

?> 

ここに私の結果があります:

原文:val1=1234567 val2=abcdef val3=ABCDEF

暗号化されたテキスト:vjt8F666666F 3hr7Dddddnn 2gq7CCCCMMM

暗号化されたテキスト:vjt8F666666F hr7Dddddnn gq7CCCCMMM

復号化されたテキスト:val1=1234567 al2=abcdef al3=ABCDEF

ご覧のとおり、暗号化でいくつかの文字が欠落しており、それが復号化にも影響しています。欠落しているものは、2 行目の v と 3 行目の v です。

理由はありますか?

4

1 に答える 1

1

なぜあなたはこれをやっている?これが実際の使用であり、単なる学術的な演習ではない場合、代わりに使用できる一方向および双方向の暗号化ソリューションがいくつかあります。

片道:双方向:crypt()
mcrypt

暗号化はほとんど解決済みの問題です。

于 2012-09-24T21:22:29.997 に答える