Мне весь скрипт не нужен нужен тока по проверки ключевых носителе (флешки)

Не совсем понятен метод криптографии, если вы сравниваете что то с чем то, то это симметричное крипто, хотя для подписи обычно используют асимметричный алгоритм, а там все довольно просто, в БД публичный ключ(который и не надо прятать), а на флэхе приватный. Если же симметрия, то сравнивать в лоб ключ с ключом - это дыра, которая легко трассируется.ruslanstep1 писал(а):Язык php а БД для сровнения ключа на флехе и БД
ruslanstep1 писал(а):куда тогда надо копать чтоб это реализовать
Код: Выделить всё
<?php
$data = "***BASF это вовсе не химический концерн, это - Beer And Sex Forever***";
/*********** берем ключи из файлов ******************************
$pubkey1='/mnt/hddname/......../crt/public-key.crt'; // путь к публичному ключу
$prvkey1='/mnt/flashka/......../key/private.key'; // путь к приватному ключу
$fp = fopen($pubkey1, "r");
$public_key = fread($fp, 8192);
fclose($fp);
$fp = fopen($prvkey1, "r");
$private_key = fread($fp, 8192);
fclose($fp);
*****************************************************************/
// ***************** Или можно захардкодить вместо чтения из файлов
$private_key = <<<EOD
-----BEGIN RSA PRIVATE KEY-----
MIIBO...................................
........................................
........................................
..................................ZFb5CI
-----END RSA PRIVATE KEY-----
EOD;
$public_key = <<<EOD
-----BEGIN PUBLIC KEY-----
MFww.....................................................
.........................................................wEAAQ==
-----END PUBLIC KEY-----
EOD;
// ****************************************************************
$binary_signature = "";
// подписываем
openssl_sign($data, $binary_signature, $private_key, OPENSSL_ALGO_MD5);
echo "<pre>Исходные данные которые будут подписаны:\n--------------------------------\n{$data}\n--------------------------------\n";
echo "Подпись:\n" . chunk_split(base64_encode($binary_signature)) . "\n";
echo "----------- Результат проверка подписи и данных --------------\n";
//$data = $data . '===Левые буковки==='; // проверка искаженных данных
$ok = openssl_verify($data, $binary_signature, $public_key, OPENSSL_ALGO_MD5);
if ($ok == 1) {
echo "Данные не подменены, то бишь валидные. Подпись тоже валидная(приватный ключ сходятся с публичным)\n";
} elseif ($ok == 0) {
echo "Какая-то сцука подменила текст, сообщение не валидно\n";
} else {
echo "Ошибка проверки подписи\n";
}
echo "</pre>";
?>
Гхм...ruslanstep1 писал(а):вопрос как сделать эти ключи public-key.crt'; /private.key';
Код: Выделить всё
<?php
echo'<meta http-equiv="Content-Type" content="text/html; charset=utf-8">';
$data = "прикол прикол";
// открываем ключи
$fp = fopen("/mnt/... /server/private.pem", "r");
$priv_key = fread($fp, 8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);
// подписываем
openssl_sign($data, $signature, $pkeyid);
// освабождаем память
openssl_free_key($pkeyid);
echo "<pre>Исходные данные которые будут подписаны:\n--------------------------------\n{$data}\n--------------------------------\n";
echo "Подпись:\n" . chunk_split(base64_encode($signature)) . "\n";
$fp = fopen("/mnt/../flexa/public.pem","r");
$cert = fread($fp, 8192);
fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
// устанавливаем, okay подпись или нет
$ok = openssl_verify($data, $signature, $pubkeyid);
echo "----------- Результат проверка подписи и данных --------------\n";
if ($ok == 1) {
echo "Данные не подменены, то бишь валидные. Подпись тоже валидная(приватный ключ сходятся с публичным)\n";
} elseif ($ok == 0) {
echo "Какая-то сцука подменила текст, сообщение не валидно\n";
} else {
echo "Ошибка проверки подписи\n";
}
openssl_free_key($pubkeyid);
echo "</pre>";
?>