中国各大网站名称,wordpress 后台插件无法访问,wordpress购物diy,网站标签的作用License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (… License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (2017~2019)cmake 后可以跟的参数MINGW 整合以及使用硬件标志使用场景在物理硬件上执行在虚拟机中执行在容器中执行 硬件标识符生成默认标识符生成实现细节 **许可证检索**在你的应用程序中集成 Licensecc构建系统 - 定位并链接 licensecc从你的代码调用 Licensecc 颁发许可证 公共 API获取硬件标识符**许可证验证** 简易demodemo环境搭建demo目录ubuntucentos License简介
什么是LIcense
为了在向客户销售商业软件时实施必要的控制措施需要对发布的软件进行管理。这些措施包括验证用户身份、检查软件是否已过期以及保护版权信息和开发人员详细信息。
考虑到某些应用程序可能在离线环境中运行无法进行实时网络验证因此还需要考虑在单机验证时防止破解的问题。
总而言之许可证利用 HTTPS 网站的证书和签名技术一方面证明当前用户是许可证申请人另一方面防止恶意破解和伪造篡改许可证以免费使用软件。
简易License制作
1、获取目标电脑的信息例如MAC地址、IP地址、主板序列号等等
2、根据目标电脑的MAC地址、IP地址、主板序列号、生成时间、失效时间等生成一个JSON文件
3、软件启动读取JSON和软件启动的电脑配置及当前时间进行对比如果一样那么符合软件启动如果不一样License报错
4、当前JSON就是记事本文件用户可以随机更该这肯定不行所以就需要加密
加密扫盲
对称加密
对称加密也称为对称密码,是指在加密和解密时使用同一密钥得加密方式
非对称加密
有非对称加密必然就会有对称加密对称加密就是我们一般意义上的加密算法这种算法在加密和解密时都使用同一个密钥所以对称加密算法的密钥又叫做共享密钥。对称加密算法一般使用AESAdvanced Encryption Standard加密算法。 非对称加密有两个密钥一个公钥一个私钥。公钥是公开的供多个人使用私钥是非公开的仅一个人或者少数群体使用。 当非对称加密算法用作加解密时公钥用来对明文加密私钥用来给密文解密 这个顺序不能颠倒。你可以这样理解密文是私密的东西只有少数人才能解密所以少数人手里的私钥用来解密多数人手里的公钥不能解密只能加密。 为什么要区分公钥和私钥呢直接使用一个共享密钥不行吗可以但是前提是你能够安全的将共享密钥传递给对方。共享密钥如何在线上安全的同步给对方是一个问题毕竟在网络上传输信息很容易暴露。如果使用非对称密钥就可以将公钥同步给消息发送者而消息接收者则保留私钥用来解密消息这样即使公钥被中间人盗取他也只能用来做加密操作而不能解密密文。
签名 验签
虽然非对称加密可以解决“密钥分配问题”但是它不能防止伪造消息的问题。既然公钥可以公之于众大家都知道你的消息要怎么加密假如A想给B发送消息那么中间人X可不可以将A发送的消息拦截并将自己的消息加密以后发送给B呢当然可以
这就好比你买了一张周杰伦的演唱会的门票我看到了之后自己伪造了一个一模一样的如此一来我也可以去看周杰伦的演唱会。这时官方组织者发现了这个漏洞以后规定周杰伦的演唱会门票需要带上官方印章才能进场此时我就算把门票画的再惟妙惟肖少了官方印章我的这张假门票依然是张废纸。
如何解决这个问题呢答案就是给你的消息“盖章”即签名签名就是认证你的身份。这里还是使用非对称密钥算法只不过使用的顺序和加密消息时恰好相反。 签名时是私钥用来加密公钥用来解密。 你可以这样理解给消息签名就好比给文件盖章你会随随便便把你自己的印章交给别人来使用吗当然不行所以公钥不适合用来签名私钥用作签名更加合理。需要注意的是签名所使用的密钥对由消息发送者生成并提供给消息接收者这和给消息加密时正好相反这样说来消息加密和消息签名这两个使用场景就需要生成两套密钥对。 出于性能方面的考虑大多数情况下给消息加密还是使用的对称加密算法为了解决“密钥分配问题”只会在第一次发送共享密钥的时候才会使用非对称加密一旦消息接收者得到了共享密钥通信双方就能够通过共享密钥进行通信了。
此外使用非对称密钥对消息签名也可以防止消息被人篡改由于性能原因一般不会对消息原文进行签名而是先通过哈希算法形成消息摘要再对消息摘要签名。消息接收者验签时会将消息的明文进行哈希再将消息签名解密两者比对如果一致则证明消息没有被篡改过。
Licensecc使用
构建和编译
在linux上进行编译
Ubuntu
支持的Ubuntu发行版包括20.04Focal Fossa、18.04Bionic Beaver和16.04Xenial。 应该可以在任何较新的Debian派生发行版上进行构建。
Install prerequisites: 安装先决条件
sudo apt-get install cmake valgrind libssl-dev zlib1g-dev libboost-test-dev libboost-filesystem-dev \libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev \libboost-date-time-dev build-essentialCentOS 7
CentOS 7 预装了 gcc 4.8但它无法编译带有正则表达式错误的代码。因此有必要将 gcc 升级到 4.9 或更高版本。 安装先决条件
yum -y update yum -y install install centos-release-scl
yum -y install wget boost boost-devel boost-static openssl openssl-devel openssl-static
yum -y install glibc-static devtoolset-7-toolchain devtoolset-7-gcc devtoolset-7-gcc-c devtoolset-7-valgrind-develexport CC/opt/rh/devtoolset-7/root/usr/bin/gcc
export CXX/opt/rh/devtoolset-7/root/usr/bin/gCentOS 7自带的CMake版本为2.8.11该版本已不再受支持。您需要编译并安装一个较新的3.6版本的CMake。
wget https://cmake.org/files/v3.11/cmake-3.11.0.tar.gz
tar zxvf cmake-3.11.0.tar.gz
cd cmake-3.11.0
./bootstrap
make
sudo make install
cmake --version #(check its 3.11.0) CentOS 8
Install prerequisites: 安装先决条件
yum -y update yum -y groupinstall Development Tools
yum -y install wget cmake boost boost-devel openssl-devel zlib-devel
dnf -y --enablerepoPowerTools install boost-static CentOS 8 没有预装静态版本的 OpenSSL。需要从源代码编译安装。
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz
tar xzf OpenSSL_1_1_1d.tar.gz cd openssl-OpenSSL_1_1_1d
./config make -j 8
sudo make install Licensecc应该可以在任何近期2020年的Linux发行版上编译。我们保持与CentOS 7较旧的发行版的兼容性。
最低要求
gcc 4.9, cmake 3.6GCC 4.9, CMake 3.6zlib, openssl 1.0.2 zlib openssl 1.0.2Boost 1.57 提升至 1.57 (如果您想自行编译 Boost 版本请记得使用该旗标)
可选的先决条件
Doxygen和Sphynx都是用于编写文档的工具。
下载并编译
这个项目有一个子模块许可证生成器。请记得在克隆项目时添加该选项
git clone --recursive https://github.com/open-license-manager/licensecc.git配置
cd licensecc/build
cmake .. -DCMAKE_INSTALL_PREFIX../install编译和测试
make
make installmake test
ctest -T memcheckcmake 后可以跟的参数
定义的名字描述LCC_PROJECT_NAME这与正在为其生成许可证的项目名称相对应。 该标志是可选的如果您不指定它构建系统将为您创建一个名为 DEFAULT 的项目该目录如果存在只能生成一次。LCC_LOCATION如果您单独下载了许可证生成器那么该文件就安装在该文件夹中或者可以在该文件夹中找到名为“lcc-config.cmake”的文件CMAKE_BUILD_TYPERelease生成库的发布版本应作为默认版本使用CMAKE_INSTALL_PREFIX “CMAKE_INSTALL_PREFIX” 是 CMake 的预设变量用于指定安装程序的根目录。用于安装编译好的库和头文件的文件夹。默认值/usr/localBOOST_ROOT安装Boost的文件夹可选如果您使用系统包管理器安装Boost则可能不需要指定此文件夹OPENSSL_ROOT安装OpenSSL的文件夹可选如果您将OpenSSL作为系统包安装则可能不需要指定此文件夹
在Linux上为Windows进行交叉编译
在主机上进行测试Ubuntu 18.04
先行条件
sudo apt-get install cmake valgrind binutils-mingw-w64 mingw-w64 mingw-w64-tools \ mingw-w64-x86-64-dev libz-mingw-w64-dev wine-stable wine-binfmt p7zip-full下载并编译Boost
export CUR_PATH$(pwd)
wget -c https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.tar.bz2
tar xjf boost_1_71_0.tar.bz2
rm boost_1_71_0.tar.bz2
cd boost_1_71_0
sudo ln -s /usr/bin/x86_64-w64-mingw32-g /usr/local/bin/g-mingw
./bootstrap.sh
./b2 toolsetgcc-mingw target-oswindows address-model64 --with-date_time --with-test --with-filesystem --with-program_options --with-regex --with-serialization --with-system runtime-linkstatic --prefix./dist release install安装OpenSSL:
wget --no-check-certificate https://bintray.com/vszakats/generic/download_file?file_pathopenssl-1.0.2h-win64-mingw.7z -O openssl.7z
7z x openssl.7z
rm openssl.7z配置并编译
cmake -DCMAKE_TOOLCHAIN_FILE../modules/toolchain-ubuntu-mingw64.cmake -DOPENSSL_ROOT_DIR$CUR_PATH/openssl-OpenSSL_1_1_1d/dist -DCMAKE_FIND_DEBUG_MODEON -DOPENSSL_USE_STATIC_LIBSON -DBOOST_ROOT$CUR_PATH/boost_1_71_0/dist ..编写文档
创建Python虚拟环境
python3 -m venv .venv. .venv/bin/activate
pip install wheel
pip install -r requirements.txt构建文档
. .venv/bin/activate
cd build
cmake ..
make documentation在windos上进行编译
本页介绍如何在Windows平台上构建该库。支持MSVC编译器和MinGW。
MSVC (2017~2019)
支持的Visual Studio版本如下
最新的Visual Studio 2019用于开发在Travis.ci上使用Visual Studio 2017进行自动化测试。
MSVC安装前置条件
Git是必备条件。如果您没有安装Git可以从Git-scm.com下载。
可以在SourceForge上找到Boost的预编译版本https://sourceforge.net/projects/boost/files/boost-binaries/。选择与所需架构匹配的版本例如如果您需要使用Visual Studio 2019 64位可以下载https://dl.bintray.com/boostorg/release/1.71.0/binaries/boost_1_71_0-bin-msvc-all-32-64.7z和https://dl.bintray.com/boostorg/release/1.71.0/binaries/boost_1_71_0-msvc-14.2-64.exe
使用Boost 1.71时建议下载最新版本的CMake版本号大于3.16。Visual Studio 2019版本并非最新版本。
检查代码
使用Git检查代码 [!NOTE] 这个项目有一个子模块许可证生成器。记得在克隆时使用选项-recursive。 git clone --recursive https://github.com/open-license-manager/open-license-manager.git编译和构建命令行
在你检出库所在的文件夹中打开命令提示窗口。
配置该库Windows x64
cd build
cmake .. -G Visual Studio 16 2019 -A x64 -DBOOST_ROOTC:\local\boost //(or where boost was installed)配置该库Windows x86
由于某些配置原因我们无法使用Visual Studio生成器在x86架构上构建。我们建议使用Ninja构建系统。
cd build
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat x86
cmake .. -G Ninja -DBOOST_ROOTC:\local\boost //(or where boost was installed)支持的CMake定义/选项
cmake 后可以跟的参数
定义的名字描述-DSTATIC_RUNTIME1静态链接到标准库和运行时支持库编译器标志/MT-DCMAKE_BUILD_TYPERelease链接到Boost库的发布版本。-DCMAKE_INSTALL_PREFIXC:…安装库和头文件的文件夹-DBOOST_ROOTC:… -DBOOST_ROOTC…将 boost 安装到某个文件夹中。如果 cmake 报告找不到 boost请考虑更新 cmake。
编译和测试
cmake --build . --target install --config Release
ctest -C Release编译和构建Visual Studio 2019
Visual Studio 2019与CMake集成此过程需要重启几次但并非完全“流畅”。
在以“作为CMake项目”方式打开项目后应在根目录中出现一个名为“CMakeSettings.json”的文件。按照以下方式编辑该文件该文件适用于x86架构。特别要注意的是 在CMake项目中我们需要指定要使用的CMake版本。为此我们需要在CMakeSettings.json文件中添加以下内容
{configurations: [{name: x86-Debug,generator: Visual Studio 16 2019,configurationType: Debug,buildRoot: ${projectDir}\\out\\build\\${name},installRoot: ${projectDir}\\out\\install\\${name},cmakeExecutable: C:/Program Files/CMake/bin/cmake.exe,cmakeCommandArgs: ,buildCommandArgs: ,ctestCommandArgs: ,inheritEnvironments: [ msvc_x86 ],intelliSenseMode: windows-msvc-x86,variables: [{name: BOOST_ROOT,value: F:/boost_1_71_0,type: PATH}]}]
}MINGW [!NOTE] 说明如何安装和配置 mingw 前提条件
Powershell7zipgitcmake
安装和编译boost:
wget https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.7z
7z x boost_1_68_0.7z -oC:/local
cd C:\local\boost_1_68_0
bootstrap.bat gcc
b2.exe -d0 --with-date_time --with-test --with-filesystem --with-program_options --with-regex --with-serialization --with-system runtime-linkstatic toolsetgcc --prefixC:\local\boost_1_68_0\boost-mingw install
cd C:/local/boost_1_68_0/boost-mingw/lib
dir确认是否已正确编译了许可证服务器。请前往您想要下载许可证服务器的文件夹。
git clone --recursive https://github.com/open-license-manager/open-license-manager.git
cd build cmake -G MinGW Makefiles -DBOOST_ROOTC:/local/boost_1_68_0/boost-mingw -DBoost_ARCHITECTURE-x64 -DCMAKE_CXX_COMPILER_ARCHITECTURE_IDx64 -DCMAKE_SHCMAKE_SH-NOTFOUND ..
cmake --build . --target install --config Release接下来进行测试
ctest -C Release整合以及使用
硬件标志
硬件标识符用于将软件的执行与物理硬件如PC关联起来。当客户端的软件发现许可证丢失时它会调用API“identify_pc”并生成一个硬件标识符。客户端必须将硬件ID返回给软件发行商后者将为其颁发许可证有关详细信息请参见“颁发许可证”。 [!NOTE] Licensecc 会猜测用户试图启动软件的环境例如虚拟机并将相关信息嵌入硬件ID中在颁发许可证之前将信息报告给软件发行商。 使用场景
随着虚拟化环境的出现软件直接在机器上安装的情况越来越少。
在物理硬件上执行
如果客户端在物理硬件上运行该软件可以通过多种参数CPU类型/内存/磁盘标签/MAC地址来识别硬件。有关支持的识别策略的详细信息请参见“功能”部分。
在虚拟机中执行
如果你允许软件用户在虚拟机中生成PC标识符你应该问自己这样做的真正用途是什么因为虚拟机可以被完整地复制到其他地方而且很难检测到这一点除非使用尚未支持此库的外部许可证服务器
通常情况下当机器被复制时MAC地址会发生变化。但是有时MAC地址会自动发生变化。软件发行商可能会将其作为最后一种手段来防止虚拟机被复制。具体情况需要逐一验证。软件编辑者可能希望防止人们从虚拟机中提取软件。他们可以使用一个隐藏的注册表键或位于安装目录之外的特定文件来验证软件是在原始虚拟机中分发的。或者他们可以将执行与特定类型的虚拟化进行链接OpenLicenseManager支持此功能。 [!NOTE] 在这种情况下建议仅限日期的试用许可证。 在容器中执行
取决于容器是如何使用的是否需要包含硬件标识符可能有意义或毫无意义。例如如果容器用于避免污染外部分发环境那么包含硬件标识符是完全有意义的。但如果用户在云中的Kubernetes集群中运行Docker则包含硬件标识符毫无意义。
硬件标识符生成
授权应用程序将调用API方法“identify_pc”来生成硬件标识符并将其打印给用户查看。用户随后将联系软件许可方获取相应的许可证。
授权应用程序可以使用参数来指定标识策略参见 也可以让 licensecc 自动选择如何生成标识符通过传递 hw_id_methodSTRATEGY_DEFAULT。在这种情况下licensecc 能够识别用户正在运行的虚拟环境并选择适当的生成策略。
下面是“identify_pc”方法使用的完整标识符生成工作流。 默认标识符生成实现细节
本节介绍默认硬件标识策略的内部工作原理。
当授权软件调用identify_pc时标识生成将遵循以下步骤
它会首先查看环境变量IDENTIFICATION_STRATEGY。如果已经设置它将使用该变量中的识别策略。它会尝试确定已授权软件正在运行的虚拟环境。 如果未找到虚拟环境它将使用 LCC_BARE_TO_METAL_STRATEGIES 中的策略它将逐个尝试这些策略直到第一个策略成功。如果它检测到正在虚拟机中运行它将尝试 LCC_VM_STRATEGIES 中的策略它将逐个尝试这些策略直到第一个策略成功。
如果你想实现自己的硬件识别策略可以查看一下这个库。
http://open-license-manager.github.io/licensecc/api/extend.html#tweak-hardware-signature-generator [!NOTE] 无论当前使用的默认方法是什么licensecc都会尝试使用与生成标识符时相同的策略对其进行验证。例如磁盘标识符始终将通过“.”进行验证。 许可证检索
licensecc 如何查找许可证文件
当 licensecc 集成到软件中时它可以根据以下内容自动查找其许可证文件或多个许可证文件
环境变量
在环境变量 LICENSE_LOCATION 中放置许可证文件的完整路径库将查找它。多个许可证文件可以用“”分隔。在环境变量 LICENSE_DATA 中放置完整的许可证内容将允许库加载它。
将许可证放在许可可执行文件的同一文件夹中将使软件找到自己的许可证。文件名必须与可执行文件相同扩展名为 .lic。例如如果你正在许可 my_awesome_software.exe许可证文件必须位于同一文件夹中并且必须称为 my_awesome_software.lic。
**调用应用程序可以使用 LicenseLocation 结构指定位置或完整的许可证数据。**实现并注册接口 LicenseLocator软件作者可以轻松地定义自己的策略。
在你的应用程序中集成 Licensecc
本简短指南解释了如何在你的应用程序中集成 licensecc。
示例项目中提供了工作示例https://github.com/open-license-manager/examples。
构建系统 - 定位并链接 licensecc
我们强烈建议使用 CMake 作为构建系统。如果是这种情况最简单的编译方法是将 LicenseCC 配置为项目的 git 子模块。
然后你可以将 cmake 模块 Findlicensecc.cmake 复制到 cmake 模块目录中以便能够找到已编译的库。
将以下行添加到你的 CMakeLists.txt
find_package(licensecc 2.0.0 REQUIRED)将使外部目标 licensecc::licensecc_static 可用于链接。
Findlicensecc.cmake 将以下 CMake 变量作为输入。
CMake 变量说明LICENSECC_LOCATION如果 licensecc 未检出为 git 子模块你可以在此变量中提供提示以找到库。它可以指向安装文件夹或源文件夹。LCC_PROJECT_NAME项目的名称你要集成 licensecc 的软件。
或者可以在 find_package 的 component 部分中指定组件名称。
从你的代码调用 Licensecc
包含公共 API 的文件是 include/licensecc/licensecc.h。其中的函数被认为是稳定的。
请参阅公共 API 了解如何生成硬件标识符或验证许可证。
颁发许可证
1. 创建项目结构 在所需位置创建一个 projects 文件夹。 在 projects 文件夹内创建一个子文件夹并将其命名为 DEFAULT或你项目的名称。 在 DEFAULT 文件夹内创建以下子文件夹 include/licensecc/DEFAULTlicenses 向 DEFAULT 文件夹中添加一个 private_key.rsa 文件。 projects
└── DEFAULT #(your project name)├── include│ └── licensecc│ └── DEFAULT│ ├── licensecc_properties.h│ └── public_key.h├── licenses│ └── test.lic└── private_key.rsa2. 将 lcc 可执行文件放入你的路径
lcc 可执行文件通常位于你的构建树或安装目录中。将它添加到你的系统路径中。
3. 颁发永久无限许可证
cd projects/DEFAULT
lcc license issue -o licenses/{license-file-name}.lic4. 颁发与硬件标识符关联的许可证
从目标机器获取硬件标识符例如使用 lcc inspector。颁发以下命令
lcc license issue --client-signature XXXX-XXXX-XXXX -o licenses/{license-file-name}.lic其他选项
**base64,b**对许可证进行编码以用于环境变量。**valid-from**设置许可证有效期的开始日期YYYY-MM-DD。如果未指定则默认为当天。**valid-to**设置许可证的到期日期YYYY-MM-DD。如果未指定则许可证不会过期。**client-signature**被许可软件运行所在的机器的硬件标识符。**output-file-name**为许可证指定输出文件路径。**extra-data**在许可证中包含特定于应用程序的数据。在调用 acquire_license 方法时将会返回这些数据。**feature-names**在多功能上下文中指定要许可的功能的逗号分隔列表。
注意
项目充当 licensecc 自定义项的容器包括密钥和构建参数。项目名称显示在已颁发的许可证文件中。
公共 API
该库的公共 API 可以在 include/licensecc/licensecc.h 找到这是在使用库时唯一应该包含的文件。
获取硬件标识符
**bool identify_pc(LCC_API_HW_IDENTIFICATION_STRATEGY hw_id_method, char identifier_out, size_t buf_size, ExecutionEnvironmentInfo *execution_environment_info)
计算与特定电脑关联的硬件标识符。
当调用者没有找到有效的许可证见下文的 acquire_license时应向用户显示计算出的标识符。用户应向软件编辑者报告 pc_identifier软件编辑者随后会用它来颁发许可证。
pc_id_method STRATEGY_DEFAULT 通常是最佳选择。
首先使用 identifier_out nullptr 和 buf_size 0 调用此方法它会在 buf_size 参数中返回请求的缓冲区大小。
然后分配必要的内存然后再次调用此方法。
返回值 如果成功则返回 true如果失败因为不可能识别或缓冲区太小则返回 false。
参数
hw_id_method[in]指定首选识别方法。通常 STRATEGY_DEFAULT 适用于大多数情况。有关更多信息请参阅 wiki。identifier_out[out]将放置识别字符串的缓冲区。buf_size[in-out]将放置识别字符串的缓冲区的大小。execution_environment_info[out]如果不是 null将包含有关执行环境的信息。
enum LCC_API_HW_IDENTIFICATION_STRATEGY
此枚举列出了所有可能的电脑识别策略。用作 identify_pc 的参数。
STRATEGY_DEFAULT 在大多数情况下都应该使用。
值:
enumeratorSTRATEGY_DEFAULT 默认策略。 此策略首先检查环境变量 IDENTIFICATION_STRATEGY 的内容。如果变量已定义它将使用其中指定的策略如果未定义它将尝试检测软件在哪个虚拟环境中运行。
如果未检测到虚拟环境它将尝试 LCC_BARE_TO_METAL_STRATEGIES 中定义的策略如果检测到软件在虚拟机中运行它将使用 LCC_VM_STRATEGIES如果检测到软件在 docker 或 LXC 中运行它将使用::LCC_DOCKER_STRATEGIES 或::LCC_DOCKER_STRATEGIES如果检测到软件在云中的虚拟机中运行它将使用 LCC_CLOUD_STRATEGIES
enumeratorSTRATEGY_ETHERNET enumeratorSTRATEGY_IP_ADDRESS enumeratorSTRATEGY_DISK enumeratorSTRATEGY_CPU_SIZE 尚未实现 enumeratorSTRATEGY_HOST_NAME 尚未实现 enumeratorSTRATEGY_NONE
LCC_BARE_TO_METAL_STRATEGIES 当未检测到虚拟环境时列出所用的策略
LCC_VM_STRATEGIES 软件在虚拟机中执行时使用的策略列表
LCC_LXC_STRATEGIES
LCC_DOCKER_STRATEGIES
LCC_CLOUD_STRATEGIES 检测到在云中执行时使用的策略列表
许可证验证
LCC_EVENT_TYPE acquire_license(constCallerInformations *callerInformation, constLicenseLocation *licenseLocation, LicenseInfo *license_out)此方法用于请求使用一个产品许可证。若是本地许可证则用于检查产品是否已获得许可。
返回
LCC_EVENT_TYPE::LICENSE_OK(0)成功其他值如有错误
参数
callerInformation[in]可选可为 NULL。包含关于请求许可证验证的软件的信息。让软件指定其版本或请求单独启用所需功能的验证。licenseLocation[in]可选可为 NULL。许可证位置文件名称或环境变量的名称应不等于“\0”。license_out[out]可选可为 NULL。如果设置它将返回有关许可证的额外信息。
structCallerInformations
请求许可证验证的软件信息例如软件版本、要验证的功能。
公共成员
char version[LCC_API_VERSION_LENGTH 1] 软件版本格式 xxxx[.xxxx.xxxx] 未实现传递“\0”char feature_name[LCC_API_FEATURE_NAME_SIZE 1] 要验证的功能的名称。如果为空\0将验证“default”功能。每个项目都有一个默认功能等于项目名称。每个功能在许可证文件中都有一个单独的节unsigned int magic 应用程序传递的此数字必须与编译库时使用的魔术数字相对应。请参阅 cmake 参数 -DLCC_PROJECT_MAGIC_NUM 和 licensecc_properties.h 宏 VERIFY_MAGIC
structLicenseLocation
此结构包含有关原始许可证数据的信息。软件作者可以指定许可证文件的位置或其全部内容。
可为 NULL在这种情况下OpenLicenseManager 将尝试自行找出许可证文件的位置。
structLicenseInfo
公共成员
AuditEvent status[LCC_API_AUDIT_EVENT_NUM] 成功/失败的详细原因。失败的原因可能有多个例如许可证已过期且签名未验证。仅报告最后 AUDIT_EVENT_NUM 个。char expiry_date[LCC_API_EXPIRY_DATE_SIZE 1] 软件的最终到期日期如果软件不会过期则可以为“\0”
简易demo
demo环境搭建
1、优先安装licensecc环境
2、git clone --recursive https://github.com/open-license-manager/licensecc.git
3、在licensecc目录中mkdir
4、mkdir build
5、cd build
6、cmake LCC_PROJECT_NAME“项目名称” …
7、make
8、make install DESTDIR ./
9、会看生成对应的文件并且会在licensecc/project/你指定的项目名称/中看到你生成的公钥和私钥后面生成license的时候会用到
10、生成文件中有licensecc_properties.h和liblicensecc_static.a 请复制到demo中去使用。
demo目录
demo
└── build
└── inc├── licensecc└── datatypes.h└── licensecc.h├── licensecc_properties.h
└── lib├── liblicensecc_static.a
└── src├── demo.cpp
└── CMakeLists.txt在上面目录中 licensecc_properties.h 和 liblicensecc_static.a都是由licensecc生成的,其中 liblicensecc_static.a 包含着license中的公钥。licensecc_properties.h包含着你cmake LCC_PROJECT_NAME“项目名称” … 的时候 的项目名称
demo.cpp
#include iostream
#include unordered_map
#include licensecc/licensecc.husing namespace std;int main(int argc, char *argv[]) {unordered_mapLCC_EVENT_TYPE, string stringByEventType {{LICENSE_OK, OK },{LICENSE_FILE_NOT_FOUND, 许可证文件不存在 },{LICENSE_SERVER_NOT_FOUND, 无法联系许可证服务器 },{ENVIRONMENT_VARIABLE_NOT_DEFINED, 未定义环境变量 },{FILE_FORMAT_NOT_RECOGNIZED, 许可证文件格式无效不是 .ini 文件 },{LICENSE_MALFORMED, 缺少某些必需字段或无法完整读取数据 },{PRODUCT_NOT_LICENSED, 此产品未获得许可 },{PRODUCT_EXPIRED, 许可证已过期 },{LICENSE_CORRUPTED, 许可证签名与当前许可证不匹配 },{IDENTIFIERS_MISMATCH, 已计算标识符与许可证中提供的标识符不匹配}};LicenseInfo licenseInfo;LicenseLocation licenseLocation {LICENSE_PATH,file.lic};// string filePath ;
// copy(filePath.begin(), filePath.end(), licenseLocation.licenseData);LCC_EVENT_TYPE result acquire_license(nullptr, licenseLocation, licenseInfo);if (result LICENSE_OK) {cout 许可证正常 endl;if (!licenseInfo.linked_to_pc) {cout 许可证文件中没有硬件签名。这是一个“演示”许可证适用于所有电脑。 endl 要生成“单一电脑”许可证请使用选项 -s 调用“发行许可证”并使用之前获得的硬件标识符。 endl;}}if (result ! LICENSE_OK) {size_t pc_id_sz LCC_API_PC_IDENTIFIER_SIZE;char pc_identifier[LCC_API_PC_IDENTIFIER_SIZE 1];cout 许可证错误 endl;cout stringByEventType[result].c_str() endl;if (identify_pc(STRATEGY_DEFAULT, pc_identifier, pc_id_sz, nullptr)) {cout 电脑签名为 endl;cout pc_identifier endl;} else {cerr identify_pc 出现错误 endl;}}return result;
}ubuntu
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project (demo VERSION 1.0.0 LANGUAGES CXX)SET(OPENSSL_USE_STATIC_LIBS TRUE)
find_package(OpenSSL REQUIRED)include_directories(${CMAKE_SOURCE_DIR}/inc)
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/lib)add_executable(demo src/demo.cpp)
target_link_libraries(demo liblicensecc_static.a ${OPENSSL_CRYPTO_LIBRARY} -pthread -ldl)
centos
cmake_minimum_required(VERSION 3.6)
project (demo VERSION 1.0.0 LANGUAGES CXX)SET(OPENSSL_USE_STATIC_LIBS TRUE)
find_package(OpenSSL REQUIRED)include_directories(${CMAKE_SOURCE_DIR}/inc)
LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/lib)add_executable(demo src/demo.cpp)
target_link_libraries(demo liblicensecc_static.a ${OPENSSL_CRYPTO_LIBRARY} -lz -pthread -ldl)
在第一个语法中-pthread 和 -ldl 被链接在 liblicensecc_static.a 和 OPENSSL_CRYPTO_LIBRARY 之后。
在第二个语法中-lz、-pthread 和 -ldl 被链接在 liblicensecc_static.a 和 OPENSSL_CRYPTO_LIBRARY 之前。