Я хочу хранить лицензионные ключи программного обеспечения в поле моего mysql db, но я хочу, чтобы номер лицензии хранился в зашифрованном формате, чтобы в случае компрометации db лицензионные ключи не могли быть использованы.
Возможны 3 сценария с полем лицензионного ключа:
Я хотел бы зашифровать лицензию перед ее сохранением, а затем при отображении пользователю, вошедшему в систему, снова запустить ту же функцию шифрования, чтобы расшифровать лицензию.
Я думаю, что мне нужно начать с проверки strlen лицензии.
Я настроил следующее:
function scramble($scramblestr) {
// check string length
$length = strlen($scramblestr);
// if 10 digit license (all numbers)
if ($length == 10) {
$1st = substr($scramblestr, 0, 1);
$2nd = substr($scramblestr, 1, 1);
$3rd = substr($scramblestr, 2, 1);
$4th = substr($scramblestr, 3, 1);
$5th = substr($scramblestr, 4, 1);
$6th = substr($scramblestr, 5, 1);
$7th = substr($scramblestr, 6, 1);
$8th = substr($scramblestr, 7, 1);
$9th = substr($scramblestr, 8, 1);
$10th = substr($scramblestr, 9, 1);
// swap 3rd character with 7th / swap 5th character with 9th
$scramblestr = $1st . $2nd . $7th . $4th . $9th . $6th . $3rd . $8th . $5th . $10th;
// if 25 digit license (with hyphen separators)
} elseif ($length == 29) {
$scramblestr = array_filter(explode('-', $scramblestr), 'strlen');
// swap 2nd & 4th sections
$scramblestr = $scramblestr[0] . "-" . $scramblestr[3] . "-" . $scramblestr[2] . "-" . $scramblestr[1] . "-" . $scramblestr[4];
// swap alpha characters 13 places in the alphabet
$scramblestr = str_rot13($scramblestr);
// if null or if stored incorrectly (for example if the license is not null but contains an invalid number of characters)
} else {
$scramblestr = "Unknown";
}
return $scramblestr;
}
Однако это приводит к следующей ошибке сервера 500:
Ошибка синтаксического анализа PHP: синтаксическая ошибка, неожиданное ‘1’ (T_LNUMBER), ожидание
переменная (T_VARIABLE) или ‘$’
Это указывает на 1-ю ссылку на подстроку. Однако, согласно php.net, это должно быть целое число, используемое здесь для обозначения длины строки.
Есть идеи?
Или есть более эффективный способ выполнить это действие? Или у кого-нибудь есть альтернативные методы, которые могут подойти?
«@Фред & CaptainCarl, вы оба были правы, как я мог не осознавать, что … сначала изменил $ st на $ и так далее … — BottyZ «
Отправка в качестве ответа:
Проблема здесь в том, что ваши переменные начинаются с числового значения; не могу этого сделать. Сделать что-то вроде $a1st
в отличие от $1st
пока начинаю с буквы.
Ссылки на стек вы можете прочитать:
Допустимое имя переменной начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания. Как регулярное выражение, оно будет выражаться так: ‘[a-zA-Z_ \ x7f- \ xff] [a-zA-Z0-9_ \ x7f- \ xff] *’
https://secure.php.net/manual/en/language.variables.basics.php
Наименование ваших переменных, например $1st
является недействительным.
Вы также можете зашифровать данные в базе данных в MySQL 5.7 или MariaDB 10.1. Вы можете сделать это с одним полем, таблицами или заполненным табличным пространством, включая файлы журналов и т. Д.