php使用服务器端和客户端加密狗环境部署及使用记录(服务器端windows环境下部署、linux环境宝塔面板部署、客户端部署加密狗)

news2024/11/28 4:37:09

php使用服务器端和客户端加密狗环境部署及使用记录

  • ViKey加密狗环境部署
    • 1.windows环境下部署
      • 开发文档
      • 验证代码
      • 提示Fatal error: Class 'COM' not found in
    • 2.linux环境下部署(宝塔面板)
      • 开发文档
      • 验证代码
      • 提示Fatal error: Uncaught Error: Call to undefined function VikeyFind()
    • 3.网页端使用加密狗(客户端)
      • 使用文档
      • 安装ViKey网页控件
      • 登录逻辑
        • 1.javascript验证逻辑
        • 2.HTML容器

在PHP中使用加密狗(通常被称为USB加密设备或硬件安全模块HSM)涉及与加密狗的特定硬件和API接口进行交互。每个加密狗供应商都会提供其设备的驱动程序和API文档,遵循这些文档来在PHP中集成加密狗。

  1. 了解加密狗
    • 查阅加密狗的官方文档,了解其功能、API接口和任何特定的要求。
    • 确定加密狗是否支持PHP,或者是否有可用的库或插件可以与其一起使用。
  2. 安装驱动程序
    • 在服务器上安装加密狗的驱动程序。这通常涉及将驱动程序文件上传到服务器并运行安装程序。
    • 确保驱动程序与你的操作系统和PHP版本兼容。
  3. 配置PHP
    • 根据加密狗的文档,配置PHP以使用加密狗。这可能涉及在php.ini文件中添加特定的扩展或设置。
    • 重启Web服务器以使配置更改生效。
  4. 编写代码
    • 使用加密狗提供的API函数在PHP中编写代码。这些函数允许与加密狗进行通信,执行加密、解密、签名和验证等操作。
    • 通常,使用特定的函数来打开与加密狗的连接,执行所需的操作,然后关闭连接。
  5. 测试
    • 在开发环境中测试代码,确保它可以正确地与加密狗进行通信并执行所需的操作。
    • 检查错误消息和日志,以确保没有遗漏任何重要的配置或步骤。
  6. 部署
    • 将代码部署到生产环境中,并确保加密狗已正确连接到服务器。
    • 在生产环境中进行进一步的测试,以确保代码可以正常工作并满足你的需求。

ViKey加密狗环境部署

1.windows环境下部署

开发文档

网页.PHP

验证代码

$ViKeyInterface = new COM("ViKeyActiveX.ViKeyInterface.1");
$ViKeyInterfaceVersion = $ViKeyInterface->IGetVersion();

$ViKeyCount = $ViKeyInterface->IVikeyFind();
if ($ViKeyInterface->IViKeyGetError() == 0 && $ViKeyCount > 0) {
    $ViKeyIndex = 0;
    $ViKeyInterface->IVikeyUserLogin($ViKeyIndex, "11111111");
    if ($ViKeyInterface->IViKeyGetError() == 0) {
        echo "用户登陆加密狗成功! <br />";
    } else {
        echo "用户登陆加密狗失败<br /> ";
    }
} else {
    die("系统没有找到加密狗");
}

提示Fatal error: Class ‘COM’ not found in

1、在windows的“服务”里面检查COM 服务是否已经启动。如果未启动,请启动它
2、检查php目录ext文件夹下面php_com_dotnet.dll是否存在
3、在php.ini里面加入以下语句:

[PHP_COM_DOTNET]
extension=php_com_dotnet.dll
com.allow_dcom = true

PHP 5.4.5以前的版本,只需要在php.ini中把com.allow_dcom = true打开就可以了,但是5.4.5版本以后,PHP把com/dotnet 模块集成到了一个单独的扩展中,所以需要在php.ini中加一行扩展extension=php_com_dotnet.dll,是加一行,不是打开,默认配置文件中没有这一行的,然后重启IIS或Apache,再次运行就正常了。

2.linux环境下部署(宝塔面板)

开发文档

Linux.php

验证代码

$ViKeyCount = 0;
$ViKeyErrorCode = 0;
$ViKeyErrorCode = VikeyFind($ViKeyCount);
PrintKeyValueEx("ViKeyErrorCode", $ViKeyErrorCode, "ViKeyCount", $ViKeyCount);

提示Fatal error: Uncaught Error: Call to undefined function VikeyFind()

1.php版本必须>7.2;
2.在php.ini加入extension=vikey.so
3.将vikey.so拷贝到php扩展的ext目录里面
4.将libvikey.so拷贝到系统目录里面/usr/local/lib
5.php重载配置,即可。

3.网页端使用加密狗(客户端)

使用文档

网页.支持谷歌浏览器

安装ViKey网页控件

浏览网页前请先安装“ViKey网页控件”,才可以正常的访问ViKey加密狗。

登录逻辑

在这里插入图片描述

1.javascript验证逻辑
 var ViKeyInterface;
        var bHasInstallVikey = 0;

        function IsInstallVikey() {
            if (bHasInstallVikey == 0) {
                console.log("尚未安装插件,或插件尚未正常运行");
            } else {
                console.log("插件工作正常");
            }
        }

        //执行加载
        window.onload = function () {
            var strSocketResult;
            //创建UK类
            ViKeyInterface = new ViKeySocketInterface();

            //检测控件安装
            setTimeout(function () {
                ViKeyInterface.CheckInstall();
            }, 1000);


            ViKeyInterface.ViKeySocket.onmessage = function (msg) {
                var FM = window.document.ViKeyForm;
                var ReceiveJsonData = JSON.parse(msg.data);
                //console.log(ReceiveJsonData);

                if (ReceiveJsonData.FunctionType == "VikeyFind") {
                    if (ReceiveJsonData.ErrorCode == 0) {
                        console.log("已找到ViKey加密锁数量:" + ReceiveJsonData.Count);
                    } else {
                        console.log("查找失败 ERRORCODE:" + ReceiveJsonData.ErrorCode);
                    }
                } else if (ReceiveJsonData.FunctionType == "CheckInstall") {
                    //alert("CheckInstall");
                    if (ReceiveJsonData.ErrorCode == 0) {
                        bHasInstallVikey = 1;
                        IsInstallVikey();
                        setTimeout(function () {
                            IsInstallVikey();

                        }, 500);
                    }
                } else if (ReceiveJsonData.FunctionType == "VikeyGetHID") {
                    if (ReceiveJsonData.ErrorCode == 0) {
                        console.log("获取硬件序列号成功,硬件 " + ReceiveJsonData.HID);
                        FM.etdNTID.value = ReceiveJsonData.HID;
                    } else {
                        console.log("获取硬件序列号失败 ERRORCODE:" + ReceiveJsonData.ErrorCode);
                    }
                } else if (ReceiveJsonData.FunctionType == "VikeyUserLogin") {
                    if (ReceiveJsonData.ErrorCode == 0) {
                        console.log("用户登录成功" + FM.UserPin2.value);
                        //location.href = "http://tools.qiaodu.net/dog/";
                        /*登录逻辑,
                           * 1.使用ajax将将FM.UserPin2.value作为参数传至后台
                           * 2.后台加密FM.UserPin2.value
                           * 3.设置cookie,返回给前台
                           * 4.判断是否能正常登录
                        * */

                    } else {
                        console.log("用户权限登陆失败 ERRORCODE:" + ReceiveJsonData.ErrorCode);
                    }
                }
            };
        }

        //插件是否正常
        function CheckInstallEx() {
            //bHasInstallVikey = 0;
            ViKeyInterface.CheckInstall();
            setTimeout(function () {
                IsInstallVikey();
            }, 500);
        }

        //以用户权限登录
        function ViKeyUserLogon() {
            var FM = window.document.ViKeyForm;
            var ViKeyIndex = 0;
            ViKeyInterface.FindViKey();
            ViKeyInterface.VikeyGetHID(ViKeyIndex);//获取硬件ID
            ViKeyInterface.VikeyUserLogin(ViKeyIndex, FM.UserPin2.value);
        }
2.HTML容器
<form action="" name="ViKeyForm" id="ViKeyForm">
    <table width="960" border="1" align="center" bgcolor="#dfe7df">
        <tr>
            <td width="200">&nbsp;</td>
            <td>&nbsp;</td>
            <td><input name="btnInstall" type="button" class="ctbottom" id="btnInstall" value="检测控件"
                       onClick="CheckInstallEx();"></td>
        </tr>
        <tr>
            <td>
                <div align="right"><span class="ctbody3">硬件序列号:</span></div>
            </td>
            <td><input name="etdNTID" type="text" class="cttextboxt" id="etdNTID" size="90" maxlength="32"></td>
            <td></td>
        </tr>
        <tr>
            <td>
                <div align="right" class="ctbody3">用户密码:</div>
            </td>
            <td><input name="UserPin2" type="password" class="cttextboxt" id="UserPin2" autocomplete="off"></td>
            <td><input name="btnUserPin2" type="button" class="ctbottom" id="btnUserPin2" value="用户登录"
                       onClick="ViKeyUserLogon();"></td>
        </tr>
    </table>
</form>

@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis 入坑基本指南

引言 本指南将帮助您了解如何安装、配置和基本使用 Redis。Redis 是一款开源的高性能键值存储系统&#xff0c;可用于缓存、数据库、消息中间件等多种用途。 1. 安装 Redis a. 下载 Redis&#xff1a; 可以从 Redis 官方网站&#xff08;https://redis.io&#xff09;下载最…

CRM定义是什么?

CRM&#xff0c;即客户关系管理&#xff0c;是一种综合性的管理策略&#xff0c;旨在通过一系列技术手段和业务流程&#xff0c;建立、维护和优化企业与客户之间的关系。它不仅仅是一种技术工具&#xff0c;更是一种以客户为中心商业哲学&#xff0c;是现代企业提升竞争力、实现…

Pycharm远程同步的mapping与sync

用Pycharm进行项目远程部署的时候会遇到两个同步文件&#xff0c;一个是点击 tools—>deployment—>configration——>mapping 一个是链接虚拟环境的时候会有一个sync&#xff0c;那么这两种同步有什么区别呢&#xff1f; 区别就是&#xff0c;2包括1&#xff0c;要用…

rag-embeddings基础流程

什么是检索增强的生成模型 LLM 固有的局限性 LLM 的知识不是实时的LLM 可能不知道你私有的领域/业务知识 检索增强生成 RAG&#xff08;Retrieval Augmented Generation&#xff09;顾名思义&#xff0c;通过检索的方法来增强生成模型的能力。 类比&#xff1a;你可以把这个…

[笔记] Win11 Microsoft Store App 离线下载

微软应用商店无法下载或下载缓慢解决方法 在一些环境下 Microsoft Store 下载速度缓慢&#xff0c;或者需要账号登录才能安装的场景&#xff0c;可以通过找到对应的离线安装包的形式进行安装。 Micorsoft Store 中的离线安装包一般后缀为 AppxBundle 和 Appx。以 Ubuntu 为例…

【数据结构】C/C++ 带头双向循环链表保姆级教程(图例详解!!)

目录 一、前言 二、链表的分类 &#x1f95d;单链表 &#x1f95d;双链表 &#x1f95d;循环链表 &#x1f95d;带头双向循环链表 &#x1f34d;头节点&#xff08;哨兵位&#xff09;的作用 ✨定义&#xff1a; ✨作用&#xff1a; &#x1f347;总结 三、带头双向循环链表 …

Backblaze发布2024 Q1硬盘故障质量报告-2

截至2024年第一季度末&#xff0c;我们正在跟踪279,572块正在运行的硬盘。硬盘型号在2024年第一季度末必须拥有500块或更多的硬盘&#xff0c;并在整个使用寿命期间累积超过100,000个硬盘工作日&#xff0c;达到这个条件的所有型号盘的故障率趋势表现如下&#xff1a; 除了三种…

美国纽扣电池UL4200A及16CFR1262标准亚马逊要求

2023年9月21日&#xff0c;美国消费品安全委员会CPSC(Consumer Product Safety Commission) 决定采用UL 4200A-2023&#xff08;包含纽扣电池或硬币电池的产品安全标准&#xff09;作为包含纽扣电池或硬币电池的消费品的强制性消费品安全规则&#xff0c;相关要求同时被编入到1…

asp.net成绩查询系统

说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 功能模块&#xff1a; asp.net成绩查询系统 学生功能有查看成绩和修改账号密码等 后台管理员可以进行用户管理 管理员添加管理员查询注…

解决VScode -正在本地下载 VS Code 服务器

不知道怎么回事再次连接服务器的时候一直卡在这里了&#xff0c;查看输出信息发现一直卡在下载处&#xff0c;报错信息如图1&#xff0c;输出信息如图2。 1.报错信息 图1 报错信息 图2 输出信息 2.尝试 【已解决】设置SSH主机&#xff1a;VS Code-正在本地下载 VS Code 服务器…

数据库系统理论——绪论

文章目录 前言一、数据库四个基本概念1、数据2、数据库3、数据库管理系统&#xff08;DBMS&#xff09;4、数据库系统&#xff08;DBS&#xff09; 二、数据模型1、概念数据模型2、逻辑数据模型3、物理数据模型 三、三级模式1、图片解析2、二级映像 前言 最近很长时间没更新学…

Linux信号捕捉

要处理信号&#xff0c; 我们进程就得知道自己是否收到了信号&#xff0c; 收到了哪些信号&#xff0c; 所以进程需要再合适的时候去查一查自己的pending位图 block 位图 和 hander表&#xff0c; 什么时候进行检测呢&#xff1f; 当我们的进程从内核态返回到用户态的时候&…

基于springboot+vue+Mysql的教师人事档案管理系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

layui 数据表格 拖动 列、行 位置 重新排序 等

先贴官网 layui官网 &#xff1b; 再贴一个要使用的 插件官网 &#xff1a; layui-soul-table 示例文档 &#xff1b; 这个插件功能很多 看到那个下载 后悔没早点知道啊 还自己写了 一个下载 可以到官网看看 很多实用的 需要引入的 js layui.config({base: rootPath…

LTE的EARFCN和band之间的对应关系

一、通过EARFCN查询对应band 工作中经常遇到只知道EARFCN而需要计算band的情况&#xff0c;因此查了相关协议&#xff0c;找到了他们之间的对应关系&#xff0c;可以直接查表&#xff0c;非常方便。 具体见&#xff1a; 3GPP TS 36.101 5.7.3 Carrier frequency and EAR…

PCIE协议-1

1. PCIe结构拓扑 一个结构由点对点的链路组成&#xff0c;这些链路将一组组件互相连接 - 图1-2展示了一个结构拓扑示例。该图展示了一个称为层级结构的单一结构实例&#xff0c;由一个根复合体&#xff08;Root Complex, RC&#xff09;、多个端点&#xff08;I/O设备&#xf…

计算机考研|今年这么多高校改考408,该怎么择校呢?

25年改考408院校名单 考研第一重要的事情并不是分要多高&#xff0c;而是要能考得上&#xff01; 尤其是408&#xff0c;绝对是选择大于努力的典范。方向不对&#xff0c;努力作废&#xff01; 就看我22年的分数线吧&#xff0c;最炸的就属上海交大了&#xff0c;大旱区结果…

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写&#xff0c;也可以全不写&#xff0c;但不能一部分写&#xff0c;一部分不写lambda 的省略策略&#xff1a;凡是可推导&#xff0c;都可以省略 方法引用 练习-判断语法正确性 练习-写出与方法引用等价的lambda表达式…

【Linux】HTTPS

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Linux 目录 &#x1f449;&#x1f3fb;HTTPS协议概念&#x1f449;&#x1f3fb;加密为什么要进行加密 &#x1f449;&#x1f3fb;常见的加密方式对称加密…

C语言栈的含义与栈数据操作代码详解!

引言&#xff1a;在本篇博客中&#xff0c;我们将学到数据结构——栈&#xff0c;讲到栈的含义与关于栈的数据操作代码。栈可以在顺序表、双向链表以及单链表的基础上实现&#xff0c;而于本篇博客中&#xff0c;我们选择在顺序表的基础上实现栈。 更多有关C语言和数据结构知识…