Домашние шифрования/дешифрования функция


Я знаю, что вы думаете, это никогда не хорошая идея, чтобы свернуть свой собственный шифрования функций, но я делаю это для удовольствия и самообразования.

Я создал функцию, которая позволяет отправить строку в качестве параметра и возвращает зашифрованную версию строки.

Вот моя функция шифрования:

function encrypt($string) {
    $characters = str_split($string);
    foreach($characters as &$character) {
        $ascii = ord($character);
        $random = rand(0,9);
        if($ascii < 44) {
            $prefix = chr(rand(35,78));
            $letter = chr($ascii + $random);
        } else {
            $prefix = chr(rand(79,122));
            $letter = chr($ascii - $random);
        }
        $r_ascii = [chr(rand(35,122)), chr(rand(35,122)), chr(rand(35,122))];
        $character = "{$prefix}{$random}{$r_ascii[0]}{$letter}{$r_ascii[1]}{$r_ascii[2]}";
    }
    return implode("", $characters);
}

Это будет шифровать строку, в то время как каждый персонаж станет 6 символов. 1-й 2 каждого персонажа-это ключи, которые необходимы, чтобы расшифровать письмо, и 4-й знак-это символ шифруемого кроме маскируется случайную цифру (в основном буква преобразуется в код ASCII номер и случайное число от 0-9 добавляется/вычитается из письма). 1-й ключ (помечены префиксом) позволяет функция расшифровки знаю, если случайное число должно быть добавлено или вычтено, случайное число передается как 2-ой символ в шифрования и символов 3, 5 и 6 случайных символов шум.

Примечание: префикс формируется в зависимости от количества ASCII символа, который шифруется. Если этот код ASCII номер ниже 44, случайных чисел всегда добавляют к персонажу, будучи зашифрованными, то она всегда вычитается. Префикс сам персонаж в определенном диапазоне, если ASCII количество ниже 44, случайный характер между ASCII 35 и 78 генерируется, любой из этих персонажей сказать расшифровать функцию для вычитания случайных чисел из зашифрованных символов, еще в ASCII между 79 и 122 всегда будет добавить количество.

Например, строка "не катят ваши собственные функции шифрования." может шифровать с помощью:

s7uGsxW0ueMkX99m^Zr6E_3jP1cqJ_>67&KyX6jlX.k7@hb/m1BkFDQ94cD7<0: c$`9Zp3ot6*iHLW2.sSsm2YpZ,=00 4zW3Tl\ti5@r4ir2]l<791H!9'f3ebw0y8ef%1a7B\>)u2_pY)s4qu0-[1ZoRRv6)nIn\2kgx?n9df@&j8sfP8#9))p1z1JejRd9Hl(t[27l+9R5y^>GT0&tu\w2]gAif8ig;AZ3mkf@Q7Yl#/h86&np

Теперь расшифровать функции:

function decrypt($string) {
    $characters = str_split($string, 6);
    foreach($characters as &$character) {
        if(strlen($character) > 6) continue;
        $parts = str_split($character);
        if(ord($parts[0]) > 78) {
            $character = chr(ord($parts[3])+$parts[1]);
        } else {
            $character = chr(ord($parts[3])-$parts[1]);
        }
    }
    return implode("", $characters);
}

Эта функция принимает зашифрованную строку и разбивает ее на части 6 (потому что каждый кодированный символ равен 6 символов) и переворачивает все randomizations, которые я сделал во время шифрования вернуть строку:

Never roll your own encryption functions.

Мой вопрос(ы): какие недостатки будут у меня с этими функциями?

Еще у меня есть вопрос; как эти функции будут улучшены?



Комментарии
1 ответ

Главный недостаток этого алгоритма заключается в том, что он полагается исключительно на безопасность через неясность.

Так вы сохраните всю информацию, чтобы реконструировать текстовую строку в зашифрованную строку, единственная информация, сохраняя, что зашифрованная строка безопасным является тот факт, что злоумышленник должен знать, как получить расшифрованные строки из него. Это по своей сути небезопасно.


Как злоумышленник (кто не знает алгоритм, но можно использовать encrypt функция), можно отметить следующие особенности:


  1. Зашифрованная строка всегда будет в шесть раз дольше, чем обычный текст, так хорошо было бы предположить, что каждый блок из шести символов кодирует один символ.

  2. Второй символ этого блока всегда рядом, так что, вероятно, не является функцией, которая преобразует один символ до шести случайных символов.

  3. В этот момент она становится игрой, находя взаимосвязь между персонажами в зашифрованную строку и обычный текст. Общая стратегия будет видеть, что смещение будет нужно, чтобы получить определенный характер в зашифрованную строку. Это привело бы к выводу, что смещение на самом деле в зашифрованную строку и Ваше "шифрование" нарушается.

2
ответ дан 31 января 2018 в 08:01 Источник Поделиться