go280286sai/laravel_openssl
Composer 安装命令:
composer require go280286sai/laravel_openssl
包简介
Asynchronous encryption in laravel with OpenSSL
README 文档
README
Публикация "config/openssl.php", "resources/views/vendor/openssl"
php artisan vendor:publish --provider="go280286sai\laravel_openssl\Providers\OpensslProvider"
После установке пакета необходимо выполнить миграцмю:
php artisan migrate
Изменить права папки:
Перейдите на "/vendor/go280286sai/laravel_openssl/src/OpenSSL/files/"
chmod a+w -R ssl
Генерация публичного ключа и получение данных
Для ручной генерации нового ключа необходимо выполнить:
php artisan openssl:new
Для получения персональных данных:
php artisan:show
-----BEGIN PUBLIC KEY-----
"----------------------------------"
-----END PUBLIC KEY-----
Personal key: *************
Полученные данные нужны для передачи нам информации!
Изменить ключь можно в /vendor/go280286sai/laravel_openssl/src/Models/Ssl_search
public static string $ssl_public_key = '*************';
Создадим контроллер для работы с ресурсами:
php artisan make:controller OpensslController -r
Для отображения всех доступных ресурсов добавим метод:
public function index(): View
{
$resource = Ssl_search::all();
return view('vendor.openssl.index', ['resource' => $resource]);
}
Для добавления ресурса содаем контроллер и добавляем методы:
public function create(): View
{
return view('vendor.openssl.add_resource');
}
public function store(Request $request): RedirectResponse
{
$request->validate([
'name' => 'required|string',
'key' => 'required|string',
'url' => 'required|string',
]);
Ssl_search::add_resource(['name' => $request->name, 'key' => $request->key, 'url' => $request->url]);
return redirect()->back();
}
Имя и адресс ресурса будет добавлен в базу данных 'ssl_searches', а public key будет создан под именем полученного id в формате 1_id_public.pem по адрессу "/vendor/go280286sai/laravel_openssl/src/OpenSSL/files/ssl"
Для обновления ресурса:
public function edit(int $id): View
{
$resource = Ssl_search::find($id);
$publicKey = Ssl_search::get_public_key($id . Ssl_search::$toSave);
return view('vendor.openssl.update_resource', ['resource' => $resource, 'publicKey' => $publicKey]);
}
public function update(Request $request, string $id): RedirectResponse
{
$request->validate([
'name' => 'required|string',
'key' => 'required|string',
'url' => 'required|string',
]);
Ssl_search::update_resource(['name' => $request->name, 'key' => $request->key, 'url' => $request->url], $id);
return redirect()->back();
}
Для удаления:
public function destroy(int $id): RedirectResponse
{
Ssl_search::remove($id);
return redirect()->back();
}
Передача зашиврованной информации:
public function message(): View
{
$resource = Ssl_search::all();
return view('vendor.openssl.send_message', ['resource' => $resource]);
}
public function send_message(Request $request): RedirectResponse
{
$id = $request->get('id');
$text = $request->get('text');
$url = Ssl_search::find($id)->url;
$key = Ssl_search::get_public_key($id . Ssl_search::$toSave);
$send = Ssl_search::encrypt($text, $key);
$name = Ssl_search::$ssl_public_key;
try {
$result = Http::post($url, ['name'=>$name, 'text'=>$send]);
if ($result->status() != 200) {
throw new \Exception('Not connection');
}
}
catch (\Throwable $th) {
LogMessage::send('error: '. $th->getMessage());
}
return redirect()->back();
}
С формы передаем id и текст сообщения. По id получаем url для отправки.
$name = Ssl_search::$ssl_public_key - имя ключа системы, с которой будет отправлятся сообщение.
$key = Ssl_search::get_public_key($id . Ssl_search::$toSave) - загрузит public key данного ресурса.
Ssl_search::$toSave - имя для сохранения.
$send = Ssl_search::encrypt($text, $key) - выполнит кодирование сообщение и добавит подпись.
$result = Http::post($url, ['name'=>$name, 'text'=>$send]) - передача данных.
Добавленные роуты:
Route::resource('/resource', OpensslController::class);
Route::get('/ssl/message', [OpensslController::class, 'message']);
Route::post('/ssl/send_message', [OpensslController::class, 'send_message']);
Получение сообщения:
В /vendor/go280286sai/laravel_openssl/src/Http/Controllers/OpenSslController:
public function index(Request $request): string
{
$id = Ssl_search::where('name', $request->get('name'))->first('id');
try {
$result = Ssl_search::decrypt($request->get('text'), Ssl_search::get_public_key($id->id . '_id_public'));
LogMessage::send($result);
return 'ok';
}
catch (\Throwable $th) {
LogMessage::send('error: '. $th->getMessage());
return $th->getMessage();
}
}
По переданному имени ресурса в базе находим его id и передаем его и массив $data в фунцию:
Ssl_search::decrypt($data, Ssl_search::get_public_key($id['id']. Ssl_search::$toSave));
Выполняется расшифровка сообщения и проверка подписи. Если подпись верна то возвращается результат.
go280286sai/laravel_openssl 适用场景与选型建议
go280286sai/laravel_openssl 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 22 次下载、GitHub Stars 达 0, 最近一次更新时间为 2023 年 09 月 24 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 go280286sai/laravel_openssl 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 go280286sai/laravel_openssl 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 22
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 12
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: proprietary
- 更新时间: 2023-09-24