Я делаю программу о RSA-шифровании, и у меня есть проблема прямо сейчас. Я могу только зашифровать 1-буквенные сообщения (но это так, как должно). Я думаю, что мне нужно сделать это, разделив сообщение на массив, а затем используя команду типа array_walk, проходя через код с каждой буквой, один за другим, а затем с помощью implode, чтобы собрать все обратно в конце.
<?php $p; //Først kalder jeg alle variablerne $q; $N; $e; $d; $message; $p = 2; //Derefter definerer jeg dem $q = 11; $N = $p*$q; $e = 7; $d = 13; $message = "f"; echo "Public key (".$e.", ".$N.")<br><br>"; //Echoer min puclic key bestående af e og N for ($i1 = 0; $i1 < strlen($message); $i1++) { $char1 = $message[$i1]; if (ctype_upper($char1)) { //Checker om bogstaverne er store $range1 = 65-1; //Hvis de er, defineres range til 65-1 } else if (ctype_lower($char1)) { //Checker om bogstaverne er små $range1 = 97-1; //Hvis de er, defineres range til 97-1 } $encryptedMessage = ord($char1) - $range1; //Konverterer beskeden til den tilsvarende ascii værdi - range echo "Beskeden ".$message." laves om til tallet ".$encryptedMessage; } echo "<br>"; $ePowEncrypted = pow($encryptedMessage, $e); echo "e = ".$ePowEncrypted."<br>"; $modEncrypted = fmod($ePowEncrypted, $N); echo "String mod N = ".$modEncrypted."<br><br><br>"; echo "Private key (".$d.", ".$N.")<br><br>"; for ($i2 = 0; $i2 < strlen($message); $i2++) { $char2 = $message[$i2]; if (ctype_upper($char2)) { $range2 = 90-1; } else if (ctype_lower($char2)) { $range2 = 122-1; } $decryptedMessage = ord($char2) - $range2; $shiftedChar = chr((($decryptedMessage) % 26) + $range2); } $ePowDecrypted = pow($encryptedMessage, $d); $modDecrypted = fmod($ePowDecrypted, $N); echo "Tallet ".$modDecrypted." laves om til bogstavet ".$shiftedChar; ?>
Это то, что я пытаюсь сделать функцией
<?php function encryptRSA($message) { for ($i1 = 0; $i1 < strlen($message); $i1++) { $char1 = $message[$i1]; if (ctype_upper($char1)) { //Checker om bogstaverne er store $range1 = 65-1; //Hvis de er, defineres range til 65-1 } else if (ctype_lower($char1)) { //Checker om bogstaverne er små $range1 = 97-1; //Hvis de er, defineres range til 97-1 } $encryptedMessage = ord($char1) - $range1; //Konverterer beskeden til den tilsvarende ascii værdi - range echo "Beskeden ".$message." laves om til tallet ".$encryptedMessage; return $encryptedMessage; } } $message = 'a'; encryptRSA($message); ?>
<?php $p; //Først kalder jeg alle variablerne $q; $N; $e; $d; $message; $p = 2; //Derefter definerer jeg dem $q = 11; $N = $p*$q; $e = 7; $d = 13; $message = "f"; echo "message = ".$message; echo "<br><br>"; echo "Public key (".$e.", ".$N.")<br><br>"; //Echoer min puclic key bestående af e og N include 'encryptFunction.php'; $encryptedText = encryptRSA($message); echo "Beskeden ".$message." laves om til tallet ".$encryptedText; echo "<br>"; $ePowEncrypted = pow($encryptedText, $e); echo "e = ".$ePowEncrypted."<br>"; $modEncrypted = fmod($ePowEncrypted, $N); echo "String mod N = ".$modEncrypted."<br><br><br>"; echo "Private key (".$d.", ".$N.")<br><br>"; for ($i2 = 0; $i2 < strlen($message); $i2++) { $char2 = $message[$i2]; if (ctype_upper($char2)) { $range2 = 90-1; } else if (ctype_lower($char2)) { $range2 = 122-1; } $decryptedMessage = ord($char2) - $range2; $shiftedChar = chr((($decryptedMessage) % 26) + $range2); } $ePowDecrypted = pow($encryptedText, $d); $modDecrypted = fmod($ePowDecrypted, $N); echo "Tallet ".$modDecrypted." laves om til bogstavet ".$shiftedChar; ?>
И документ, содержащий функцию
<?php function encryptRSA($message) { for ($i1 = 0; $i1 < strlen($message); $i1++) { $char1 = $message[$i1]; if (ctype_upper($char1)) { //Checker om bogstaverne er store $range1 = 65-1; //Hvis de er, defineres range til 65-1 } else if (ctype_lower($char1)) { //Checker om bogstaverne er små $range1 = 97-1; //Hvis de er, defineres range til 97-1 } $encryptedMessage = ord($char1) - $range1; //Konverterer beskeden til den tilsvarende ascii værdi - range } return $encryptedMessage; } ?>