密钥管理方法DUKPT的OpenSSL代码实现Demo
目录
1 DUKPT简介
2 基本概念
2.1 BDK
2.2 KSN
2.3 IPEK
2.4 FK
2.5 TK
3 工作流程
3.1 密钥注入过程
3.2 交易过程
3.3 BDK派生IPEK过程
3.4 IPEK计算FK过程
4 演示Demo
4.1 开发环境
4.2 功能介绍
4.3 下载地址
5 在线工具
6 标准下载
1 DUKPT简介
DUKPT(Derived Unique Key Per Transaction)是被ANSI定义的一套密钥管理体系和算法,用于解决金融支付领域的信息安全传输中的密钥管理问题,应用于对称密钥加密MAC、PIN等数据安全方面。保证每一次交易流程使用唯一的密钥,采用一种不可逆的密钥转换算法,使得无法从当前交易数据信息破解上一次交易密钥。要求收单行与终端必须同步支持该项密钥管理技术。由交易发起端点(S-TRSM,如POS、ATM)与交易接收端点(R-TRSM,如收单行)两部分组成。
注:TRSM(Tamper-Resistant Security Module)是一个具备阻止攻击能力的安全模块。
以下是 DUKPT的一些关键特点:
-
唯一性:DUKPT为每个交易生成一个唯一的加密密钥,确保即使相同的主密钥在不同交易中使用,也能产生不同的派生密钥。
-
分散:DUKPT使用一种称为分散的技术,通过将密钥按照一定规则扩展为不同的密钥,以增加密钥的安全性。
-
保密性:DUKPT通过不存储或传输主密钥的完整值,而是使用一个初始的主密钥派生出每个交易的密钥,从而增加了密钥的保密性。
-
动态变化:DUKPT可以动态地变化,以适应不同的交易条件。这使得攻击者更难预测下一个派生密钥。
-
逆推困难性:由于DUKPT的分散和动态性,逆推派生密钥以获取原始主密钥是非常困难的。
-
用途:DUKPT主要用于保护磁条卡数据、PIN(个人身份号码)加密和其他金融交易中的密钥管理。
2 基本概念
2.1 BDK
BDK(Base Derived Key)是用于派生其他密钥的基础密钥。在金融行业和加密领域中,BDK通常是一个16字节(128位)的密钥,用于生成其他密钥,如PIN加密密钥、MAC密钥等。BDK的安全性对整个加密系统至关重要,因为它作为生成其他关键的基础。通常,BDK是在加密设备的安全环境中生成和存储的,以确保其机密性。密钥派生函数将BDK与其他参数结合使用,生成用于特定加密目的的派生密钥。这有助于提高密钥的安全性,因为实际用于加密的密钥是通过派生而来的,而不是直接使用BDK。BDK在加密系统中扮演着关键的角色,它的安全性直接影响整个加密系统的强度。因此,保护和管理BDK是确保整个加密体系安全的一个重要方面。
2.2 KSN
KSN(Key Serial Number)是用于标识加密设备和交易的一种格式化序列号,由“密钥标识40bit+设备标识19bit+密钥计数器21bit”组成。KSN通常与加密操作一起使用,特别是在金融交易领域,用于生成派生密钥和跟踪加密设备的使用情况。KSN 的生成和使用是为了追踪和管理加密设备,确保其唯一性和完整性。在金融交易中,KSN 通常用于生成派生密钥,以确保每个交易都使用一个唯一的密钥,提高加密的安全性。
2.3 IPEK
IPEK(Initial Pin Encrypt Key)是金融领域中用于加密和解密用户个人身份号码(PIN)的密钥。IPEK通常是从BDK(Base Derivation Key)派生而来,通过一个特定的密钥派生函数生成。在金融交易中,IPEK用于保护用户的PIN,确保其传输和存储的安全性。
2.4 FK
FK 通常指 “Future Key”。在密码学和安全领域中,“Future Key” 指代在将来某个时刻用于加密或其他安全目的的密钥。在金融领域或其他需要密钥管理的地方,“Future Key” 是一个临时的术语,用于表示将来用于某些目的的密钥。这可能包括 PIN 密钥、MAC 密钥或其他加密密钥。FK 可能是从某个初始密钥派生出来,以确保密钥的定期轮换或更新。
2.5 TK
“TK” 通常指 “Transaction Key”,在金融领域中,这是一个用于保护特定交易的密钥,是 “Future Key” xor 分散向量得到的工作密钥TK,例如:
-
PIN 密钥的分散向量:00000000000000FF00000000000000FF
-
MAC 密钥的分散向量:000000000000FF00000000000000FF00
3 工作流程
3.1 密钥注入过程
-
Acquirer 给 POS 灌输 BDK
-
BDK + KSN(EC=0) 派生出 IPEK
-
IPEK + KSN 派生出 21 个 Future Key,分别存在 POS 的 21 个寄存器中:
-
IPEK + KSN(EC=1) -> FK1,存在寄存器 1
-
IPEK + KSN(EC=2) -> FK2,存在寄存器 2
-
…
-
IPEK + KSN(EC=21) -> FK21,存在寄存器 21
-
-
销毁 BDK 和 IPEK
3.2 交易过程
一笔交易从一个寄存器中取出一个 FK,根据应用 xor 分散向量得到的工作密钥TK进行使用。
假设取出寄存器1中的 FK1(根据应用 xor 分散向量得到的工作密钥TK)使用,交易处理完成后:
-
KSN 加 1 后变成 KSN(EC=22)
-
FK1 + KSN(EC=22) -> FK22,替换掉 FK1 存在寄存器 1 中 以此类推依次重复使用这 21 个寄存器中的 FK。
3.3 BDK派生IPEK过程
(1)将KSN右对齐复制到一个10字节的寄存器中
(2)将此10字节寄存器的21个最低有效位设置为零
(3)取这个10字节寄存器的8个最高有效字节作为输入数据,使用BDK作为加密密钥,调用3DES的CBC模式算法(其中iv向量设置为全0)进行加密
(4)使用步骤3生成的密文作为初始密钥IPEK的左半部分
(5)从步骤2的10字节寄存器中取出8个最高有效字节,并使用BDK与BDK掩码向量(0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00)的异或结果作为加密密钥,调用3DES的CBC模式算法(其中iv向量设置为全0)进行加密
(6)使用步骤5生成的密文作为初始密钥IPEK的右半部分
/***********************************************************功 能:BDK派生IPEK参 数:ipek16 - 输出,IPEK,16字节bdk16 - 输入,BDK,16字节ksn10 - 输入,KSN,10字节返 回:
***********************************************************/
static const u8 BDK_MASK[16] = {0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00};void DukptGenerateIpek( _OUT u8 * const ipek16, _IN u8 * const bdk16, _IN u8 * const ksn10 )
{u8 partKsn[8];memcpy( partKsn, ksn10, 8);partKsn[7] &= 0xE0;{u8 leftIpek[24];DES_key_schedule SchKey[2];DES_set_key_unchecked((const_DES_cblock *)&bdk16[0], &SchKey[0]);DES_set_key_unchecked((const_DES_cblock *)&bdk16[8], &SchKey[1]);DES_cblock iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };DES_ede3_cbc_encrypt( (unsigned char*)partKsn, (unsigned char*)leftIpek, 8,&SchKey[0], &SchKey[1], &SchKey[0],&iv, DES_ENCRYPT);memcpy( &ipek16[0], leftIpek, 8 );}u8 derivedBdk[16];for (fu8 i = 0; i < 16; i++) {derivedBdk[i] = bdk16[i] ^ BDK_MASK[i];}{u8 rightIpek[24];DES_key_schedule SchKey[2];DES_set_key_unchecked((const_DES_cblock *)&derivedBdk[0], &SchKey[0]);DES_set_key_unchecked((const_DES_cblock *)&derivedBdk[8], &SchKey[1]);DES_cblock iv = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };DES_ede3_cbc_encrypt( (unsigned char*)partKsn, (unsigned char*)rightIpek, 8,&SchKey[0], &SchKey[1], &SchKey[0],&iv, DES_ENCRYPT);memcpy( &ipek16[8], rightIpek, 8 );}
}
3.4 IPEK计算FK过程
变量说明:
R8: 8字节寄存器
R8A: 8字节寄存器
R8B: 8字节寄存器
R3: 21位寄存器
SR: 21位移位寄存器
KSNR: 8字节寄存器,从输入设备接收到的密钥序列号的最右8字节
IKEY: 16字节寄存器,加密密钥初始加载到输入设备
CURKEY: 16字节寄存器;在算法完成时,它包含当前事务中用于加密的工作密钥FK
处理过程如下:
(1)将IKEY复制到CURKEY中
(2)将KSNR复制到R8
(3)清除R8的21个最右边的位
(4)将KSNR的21个最右边的位复制到R3中
(5)设置SR的最左位,清除其他20位
"TAG1"
(1)SR 与运算 R3,并判断结果是否包含1?如果是,请转到“TAG2”
(2)SR 或运算 R8,并将结果存储在R8中
(3)R8 异或运算 CURKEY的右半8字节,并将结果存储在R8A中
(4)使用CURKEY的左半8字节作为密钥,对R8A进行DEA加密,并将结果存储在R8A中
(5)R8A 异或运算 CURKEY的右半8字节,并将结果存储在R8A中
(6)CURKEY 异或运算 掩码向量(0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00),并将结果存储到CURKEY 中
(7)R8 异或运算 CURKEY的右半8字节,并将结果存储在R8B中
(8)使用CURKEY的左半8字节作为密钥,对R8B进行DEA加密,并将结果存储在R8B中
(9)R8B 异或运算 CURKEY的右半8字节,并将结果存储在R8B中
(10)将R8A储存在CURKEY的右半部
(11)将R8B储存在CURKEY的左半部
"TAG2”
(1)将SR向右移动一比特
(2)如果SR不等于零(如果“1”位没有被移除),请转到“TAG1”,否则结束
/***********************************************************功 能:IPEK计算FK参 数:ipek_drvd16- 输出,FK,16字节ksn10 - 输入,KSN,10字节bdk16 - 输入,BDK,16字节返 回:
***********************************************************/
void FkFromIpek( _OUT u8 * const ipek_drvd16, _IN u8 * const ksn10,_IN u8 * const ipek16 ) {memcpy( ipek_drvd16, ipek16, 16 );u8 counter[8];memcpy( counter, &ksn10[2], 8 ); counter[0] = 0x00;counter[1] = 0x00;counter[2] = 0x00;counter[3] = 0x00;counter[4] = 0x00;counter[5] &= 0x1F;counter[6] &= 0xFF;counter[7] &= 0xFF;u8 serial[8];memcpy( serial, &ksn10[2], 8 ); serial[5] &= 0xE0;serial[6] &= 0x00;serial[7] &= 0x00;u8 shiftr[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00}; u8 crypto_register_1[8];memcpy(crypto_register_1, serial, 8); u64 intShiftr = 16*65536; while( intShiftr > 0 ) {u8 temp[8]; And( temp, shiftr, counter, 8 ); if( HaveOnes(temp, 8) ) {Or(serial, serial, shiftr, 8); u8 crypto_register_2[8];Xor(crypto_register_2, serial, &ipek_drvd16[8], 8 );{u8 crypto_register_2_temp[8];DES_key_schedule SchKey;DES_set_key_unchecked((const_DES_cblock *) &ipek_drvd16[0], &SchKey);DES_ecb_encrypt((const_DES_cblock *) crypto_register_2, (const_DES_cblock *) crypto_register_2_temp, &SchKey, DES_ENCRYPT); memcpy(crypto_register_2, crypto_register_2_temp, 8);} Xor( crypto_register_2, crypto_register_2, &ipek_drvd16[8], 8); Xor( ipek_drvd16, ipek_drvd16, BDK_MASK, 16 ); Xor( crypto_register_1, serial, &ipek_drvd16[8], 8 ); {u8 crypto_register_1_temp[8];DES_key_schedule SchKey;DES_set_key_unchecked((const_DES_cblock *) &ipek_drvd16[0], &SchKey);DES_ecb_encrypt((const_DES_cblock *) crypto_register_1, (const_DES_cblock *) crypto_register_1_temp, &SchKey, DES_ENCRYPT); memcpy(crypto_register_1, crypto_register_1_temp, 8);} Xor( crypto_register_1, crypto_register_1, &ipek_drvd16[8], 8 ); memcpy( &ipek_drvd16[0], crypto_register_1, 8 );memcpy( &ipek_drvd16[8], crypto_register_2, 8 );} intShiftr >>= 1; shiftr[7] = (intShiftr >> 0) & 0xFF;shiftr[6] = (intShiftr >> 8) & 0xFF;shiftr[5] = (intShiftr >> 16) & 0xFF;shiftr[4] = (intShiftr >> 24) & 0xFF;shiftr[3] = (intShiftr >> 32) & 0xFF;shiftr[2] = (intShiftr >> 40) & 0xFF;shiftr[1] = (intShiftr >> 48) & 0xFF;shiftr[0] = (intShiftr >> 56) & 0xFF;}
}
4 演示Demo
4.1 开发环境
-
OpenSSL 1.0.2l
-
Visual Studio 2015
-
Windows 10 Pro x64
4.2 功能介绍
演示程序主界面如下图所示,包括BDK计算密钥、BDK派生IPEK,IPEK计算密钥,KSN自增等功能。
4.3 下载地址
密钥管理方法DUKPT的OpenSSL代码实现Demo
5 在线工具
MAC、PIN、DUKPT算法
6 标准下载
ANSI X9.24-1-2009
相关文章:
密钥管理方法DUKPT的OpenSSL代码实现Demo
目录 1 DUKPT简介 2 基本概念 2.1 BDK 2.2 KSN 2.3 IPEK 2.4 FK 2.5 TK 3 工作流程 3.1 密钥注入过程 3.2 交易过程 3.3 BDK派生IPEK过程 3.4 IPEK计算FK过程 4 演示Demo 4.1 开发环境 4.2 功能介绍 4.3 下载地址 5 在线工具 6 标准下载 1 DUKPT简介 DUKPT&a…...
计算机视觉中的坐标变换
1.概述 高级驾驶辅助系统(ADAS)领域,存在多种常用的坐标系:LiDAR 坐标系、车辆坐标系、相机坐标系、图像坐标系等。因为和这些坐标系频繁打交道,本文对点的旋转与坐标系旋转等变换给出直观推导与说明。 2.坐标点平移…...
C++——NetWork
1.network.h #include <iostream> #include <winsock2.h> #include <cstring>class NetWork {int type; // 通信协议类型int sock_fd; // socket 描述符sockaddr_in addr; // 通信地址int addrlen; // 通信地址字节数bool issvr; …...
iOS -- 代码优化
目录 1. filter 优化2. return 优化案例1案例2 3. for循环优化案例1案例2 4. 枚举 优化5. 未完待续…… 1. filter 优化 原代码 if var vcs vcs {for vc in vcs {if vc is XXLoginViewController {if let index vcs.firstIndex(of: vc) {vcs.remove(at: index)}} }修改后 v…...
docker配置普通用户访问
文章目录 🌕方法一:让所有用户都可以使用docker🌙创建docker用户组🌙把当前用户加入docker用户组🌙单独把某个用户加入docker用户组🌙更新激活docker用户组🌙验证不需要sudo执行docker命令&…...
php后端学习,Java转php
遇到前后端跨域 php解决跨域问题可以加上下面的代码: header(“Access-Control-Allow-Origin:*”); 并且查看自己的数据库信息是否连接成功。 从Java转php 个人感受php跟偏向前端, 写后端逻辑时没有像java又springboot工具方便。 但是和前端联调很方便…...
Elasticsearch 中管道介绍
Elasticsearch 中管道 文章目录 Elasticsearch 中管道1、管道( Ingest Pipeline)1.**管道描述**2.**处理器(Processors)**(1)**`attachment`处理器**(2)**`remove`处理器**3.**整体流程**4.**应用场景**示例:如何使用该管道总结2、如何设置`attachment`处理器取出`指定…...
将jinjia2后端传到前端的字典数据转化为json
后端代码 from flask import Flask, render_template, jsonifyapp Flask(__name__)app.route(/) def index():data {key: value, number: 123}return render_template(index.html, datadata)if __name__ __main__:app.run(debugTrue) 前端代码 使用tojson过滤器即可 <!…...
Linux中如何理解一切皆文件
根据之前的学习我们会有一些少许的疑惑,我们的stdin ,stdout,stderr访问的是键盘显示器,然而键盘显示器等他们都有一个共同的特点就是他们都是外设,那么这些外设是怎么被看成是文件的呢? 看图可以知道硬件的…...
【贪心算法】(第十一篇)
目录 坏了的计算器(medium) 题目解析 讲解算法原理 编写代码 合并区间(medium) 题目解析 讲解算法原理 编写代码 坏了的计算器(medium) 题目解析 1.题目链接:. - 力扣(Leet…...
React(五) 受控组件和非受控组件; 获取表单元素的值。高阶组件(重点),Portals; Fragment组件;严格模式StrictMode
文章目录 一、受控组件1. 什么是受控组件2. 收集input框内容3. 收集checkBox的值4. 下拉框select总结 二、非受控组件三、高阶组件1. 高阶组件的概念 (回顾高阶函数)2. 高阶组件应用:注入props(1) 高阶组件给---函数式组件注入props(2) 高阶组件给---类组件注入prop…...
深入解析 Jenkins 自动化任务链:三大方法实现任务间依赖与状态控制
文章目录 前言1. 使用 “Build Trigger”(构建触发器)2. 使用 Jenkins Pipeline 实现任务触发3. 使用 Jenkins 的 “Parameterized Trigger Plugin” 插件例子1:任务 A 成功后自动执行任务 B例子2:任务 A 成功后自动执行 Pipeline…...
无人机飞手执照培训为什么需要脱产学习?
无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面: 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入,包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联,需要学员进行系统的学…...
PostgreSQL(十三)pgcrypto 扩展实现 AES、PGP 加密,并自定义存储过程
目录 一、pgcrypto 简介1.1 安装 pgcrypto 扩展1.2 pgcrypto 包含的函数 二、用法①:对称加密(使用 AES、Blowfish 算法)2.1 密钥2.2 密钥偏移量 三、用法②:PGP加解密3.1 什么是PGP算法?3.2 使用 GPG 生成密钥对3.3 列…...
uniapp使用webView打开的网页有缓存如何解决(APP,微信小程序)
1、给webView的url增加时间戳 this.webviewUrl ${url}?t${new Date().getTime()}; // 添加时间戳 2、在nginx服务器上添加响应头,告诉浏览器不可以使用缓存 location / {root /opt/webs/lcdp-client/dist;index index.html index.htm;try_files $uri $uri/ /…...
HarmonyOS 模块化设计
1.HarmonyOS 模块化设计 模块化设计文档 应用程序包开发与使用文档 1.1. 概述 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,HarmonyOs组件化的使用,有利于模块之间的解…...
解决docker拉取readeck镜像报Error response from daemon: toomanyrequests问题
readeck 是一个内容中心,目前已支持中文翻译 这是本地化部署后的效果: 原命令为: docker run --rm -ti -p 8000:8000 -v readeck-data:/readeck codeberg.org/readeck/readeck:latest Unable to find image codeberg.org/readeck/readeck:la…...
duilib的应用 在双屏异分辨率的显示器上 运行显示不出来
背景:win11,duilib应用,双显示器,两台分辨率相同,分别设置不同的缩放以后,应用运行以后,程序闪一下消失或者程序还在,但是UI显示不出来。 原因 窗口风格设置不合理,所以…...
零代码快速开发智能体 |甘肃旅游通
在互联网信息爆炸的时代,寻找一处让人心动的旅游胜地往往需要花费大量的时间和精力。而今天,我要向大家介绍一款能够帮助你轻松规划甘肃之行的智能体——“甘肃旅游通”。这款智能体通过低代码开发,集合了丰富的旅游信息和个性化推荐功能&…...
【MATLAB源码-第187期】基于matlab的人工蜂群优化算法(ABC)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 Artificial Bee Colony(ABC)算法是一种模仿蜜蜂觅食行为的优化算法,它通过模拟蜜蜂群体的社会结构和行为来解决数学优化问题。本文将详细介绍ABC算法的基本原理、算法流程、以及在实际应用…...
qt获取本地语言
获取本地语言 #define QSTRING_TO_UTF8(str) std::string(str.toUtf8()) enum LanguageType {kLanguageTypeChinese,kLanguageTypeTradition,kLanguageTypeEnglish };QLocale qlLanguage;QString qstrLangCode qlLanguage.languageToString(qlLanguage.language());LOG(INFO)…...
【Spring篇】Spring中的Bean管理
🧸安清h:个人主页 🎥个人专栏:【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎯Spring IOC容器 Ὢ…...
UV灯 VS LED灯,LED美甲灯是紫外线灯吗?
美甲灯是使甲油胶固化的重要工具,目前最常用的美甲灯一般是UV灯、LED灯以及CCFL灯。 一、不同的灯之间到底有什么区别呢?这次让我们好好看一下 UV灯: UV灯是紫外线灯管的简称。UV灯属于热阴极荧光灯,发出UVA(长波紫…...
得物App3D博物馆亮相“两博会”,正品保障助力消费体验升级
近日,2024中国体育文化博览会、中国体育旅游博览会(以下简称“两博会”)在苏州国际展览中心盛大开幕。本次展会汇聚了众多国内外体育文化、体育旅游领域的顶尖企业和品牌,共同展示体育产业的发展成果和最新趋势。在C展馆C21展位&a…...
rancher安装并快速部署k8s 管理集群工具
主机准备 准备4台主机 3台用于k8s集群 ,1台用于rancher 每台服务器新增配置文件 vi etc/sysctl.confnet.ipv4.ip_forward 1 刷新生效 sysctl –p 安装docker 安装的时候可以去github上检索rancher看看最新版本适配那个版本的docker,这里安装23.0.1…...
NVR接入录像回放平台EasyCVR视频融合平台语音对讲配置
国标GB28181视频平台EasyCVR视频融合平台可拓展性强、视频能力灵活,平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析接入等功能。其中,在语音对讲方面,NVR接入录像回放平台目前…...
八、Linux 系统安全:守护你的数字堡垒
Linux 系统安全:守护你的数字堡垒 在当今数字化时代,Linux 系统因其稳定性、高效性和开源性而被广泛应用于服务器、工作站以及各种嵌入式设备中。然而,随着网络攻击的日益频繁和复杂,确保 Linux 系统的安全变得至关重要。本文将深…...
PTA数据库编程练习合集
10-1 查询重量在[40,65]之间的产品信息 本题目要求编写SQL语句, 检索出product表中所有符合40 < Weight < 65的记录。 提示:请使用SELECT语句作答。 表结构: CREATE TABLE product (Pid varchar(20), --商品编号PName varchar(50), --商品名…...
分布式链路追踪-01初步认识SkyWalking
一 SkyWaling是什么? Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥…...
openpnp - 底部相机视觉识别CvPipeLine的参数bug修正
文章目录 openpnp - 底部相机视觉识别的CvPipeLine的参数bug概述笔记openpnp的视觉识别参数的错误原因备注补充 - 如果要直接改默认的底部视觉要注意END openpnp - 底部相机视觉识别的CvPipeLine的参数bug 概述 底部相机抓起一个SOD323的元件,进行视觉识别。 识别…...
日本做暧小视频在线观看网站/爱站网关键词挖掘工具
导读 我附近有一家热闹的大型超市,每次结账队伍都比较长,15人左右,然后你会看到收银台旁立着这么一个牌子: 但是看似人性化的安排,却没有发挥作用,为什么呢? 原因这个牌子的设计者,…...
宿州公司网站建设/代运营靠谱吗
转自:http://blog.csdn.net/kay_wyong/article/details/6631870 大体的思路:系统启动成功后SystemServer调用wm.systemReady()通知WindowManagerService,进而调用PhoneWindowManager,最终通过LockPatternKeyguardView显示解锁界面…...
哈尔滨做平台网站平台公司哪家好/公司网站设计与制作
K-means算法简介 K-means是机器学习中一个比较常用的算法,属于无监督学习算法,其常被用于数据的聚类,只需为它指定簇的数量即可自动将数据聚合到多类中,相同簇中的数据相似度较高,不同簇中数据相似度较低。 K-menas的优…...
织梦网站怎么做备份/自己建网站怎样建
车牌识别行业已具备一定的市场规模,在电子警察、公路卡口、停车场、商业管理、汽修服务等领域已取得了部分应用。 import glob # Contains all .txt files except our listof classes txt_files [file for file inglob.glob(images/*.txt) if file ! images/clas…...
纸业公司网站模板源文件/网上的推广
7月18日,资阳市政府和华为公司签约,双方将联手打造资阳天府云计算中心。项目包括资阳大数据平台、智能制造平台、互联网创客平台,项目将立足资阳,服务周边地区,助推资阳建成西南地区重要数据中心和云计算产业发展基地。…...
永久域名注册网站/aso苹果关键词优化
目录 背景 安装sequelize 定义配置文件 创建一个sequelize对象实例...