-
-
Notifications
You must be signed in to change notification settings - Fork 587
Expand file tree
/
Copy pathMonoAlphabeticCipher.php
More file actions
39 lines (30 loc) · 1.07 KB
/
Copy pathMonoAlphabeticCipher.php
File metadata and controls
39 lines (30 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
declare(strict_types=1);
// A mono-alphabetic cipher is a simple substitution cipher
// https://www.101computing.net/mono-alphabetic-substitution-cipher/
function monoAlphabeticCipher(string $key, $alphabet, $text): false|string
{
$cipherText = ''; // the cipher text (can be decrypted and encrypted)
// check if the text length matches
if (strlen($key) !== strlen((string) $alphabet)) {
return false;
}
$text = preg_replace('/\d+/', '', (string) $text); // remove all the numbers
for ($i = 0; $i < strlen((string) $text); $i++) {
$index = strripos((string) $alphabet, $text[$i]);
if ($text[$i] === " ") {
$cipherText .= " ";
} else {
$cipherText .= (ctype_upper($text[$i]) ? strtoupper($key[$index]) : $key[$index]);
}
}
return $cipherText;
}
function maEncrypt($key, $alphabet, $text): string|false
{
return monoAlphabeticCipher($key, $alphabet, $text);
}
function maDecrypt($key, $alphabet, $text): string|false
{
return monoAlphabeticCipher($alphabet, $key, $text);
}