密码键盘原理与HTML5应用
密码控件 原理

密码控件原理
密码控件是一种用于输入和保护密码的界面元素,而密码的原理是通过对用户输入的密码进行加密和存储,以保护用户的隐私和安全。
密码控件的实现原理主要包括以下几个方面:
1. 输入控制:密码控件会限制用户输入的字符类型和长度。
通常,密码只能包含特定的字符集合,例如字母、数字和常见的符号。
此外,密码长度通常有最小要求,以确保密码的强度。
2. 显示设置:密码控件通常会提供选项来控制密码的显示方式。
一般情况下,默认情况下密码是隐藏的,以"●"或其他符号表示。
此外,密码控件还可能提供显示密码的功能,以便用户在输入时能够确认输入的准确性。
3. 加密处理:密码输入完成后,密码控件会将密码进行加密处理。
加密算法会对密码进行转换,以保障密码的安全性。
通常,密码会通过散列函数进行单向加密,即不可逆转为明文。
这样,即使密码被泄露,攻击者也难以还原出原始密码。
4. 存储和验证:密码控件通常会将加密后的密码存储到数据库或其他存储介质中。
当用户下次登录时,密码控件会将用户输入的密码进行相同的加密处理,并将结果与数据库中的已存密码进行比对,以验证用户的身份。
密码控件的主要目的是保护用户的密码,防止密码泄露和未授
权访问。
通过加密处理和合理的存储方式,密码控件能够提高密码的安全性,并减少密码被破解的风险。
同时,密码控件还可以提供一些额外的功能,如密码重置和密码修改等,以增强用户的密码管理体验。
css+javascript写的HTML5微信端输入支付密码键盘

css+javascript写的HTML5微信端输⼊⽀付密码键盘微信端没有纯数字键盘,⽤html5写了⼀个模仿ios输⼊⽀付密码键盘效果keyboard.jsvar _keyboard = {};$(document).ready(function(){_keyboard.bindKey();_keyboard.close();});_keyboard.num = 0;/*** 给键盘绑定事件*/_keyboard.bindKey=function(){$("#keyId").on("tap","li",function(){var jthat = $(this);var numVal = jthat.attr("val");var inputVal = $("#contentId").val();if(numVal == -1){ //删除数值_keyboard.delChar();}else{ //添加数值_keyboard.addChar(numVal);}});}/*** 添加字符* @param {Object} numVal 按键的num* @param {Object} inputVal input内容*/_keyboard.addChar=function(numVal){// console.log(numVal);if(numVal == "."){return ;}if($("#contentId").find("input").eq(5).val() == ""){$("#contentId").find("input").eq(_keyboard.num).val(numVal);}if(_keyboard.num < 5){_keyboard.num++;}}_keyboard.close = function(){$("#keyboardClose").on("click",function(){$("#contentId").hide();$("#_Wdafy_keyboard").hide();$("#keyboardbackground").hide();});}/*** 删除字符* @param {Object} inputVal 当前input的val*/_keyboard.delChar=function(){$("#contentId").find("input").eq(_keyboard.num).val("");if(_keyboard.num == 0){return }_keyboard.num--;} keyboard.htm<div id="contentId" class="_Wdafy_faInput" style="display: block;"><div id="keyboardClose" class="close"><img src="img/regClose_Hover.png" /></div><div class="zfpassword">请输⼊⽀付密码</div><input type="password" readonly="readonly" /><input type="password" readonly="readonly" /><input type="password" readonly="readonly" /><input type="password" readonly="readonly" /><input type="password" readonly="readonly" /><input type="password" readonly="readonly" /><!--<img class="guangbiao" src="img/guangbiao.gif" id="cursorId"/>--><!--<input type="text" id="contentId" readonly="readonly" maxlength="20" value=""/>--> </div><div id="keyboardbackground" class="keyboardbackground"></div><div id="_Wdafy_keyboard" class="_Wdafy_keyboard" style="display: block;"><ul id="keyId"><li val="1">1</li><li val="2">2</li><li val="3">3</li><li val="4">4</li><li val="5">5</li><li val="6">6</li><li val="7">7</li><li val="8">8</li><li val="9">9</li><li val="."></li><li val="0">0</li><li val="-1">x</li></ul></div> keyboard.cssbody,html {height: 100%;}*{padding: 0;margin: 0;}._Wdafy_faInput input {width: 6.2rem; height: 1.4rem; font-size: 0.5rem; line-height: 1.4rem;}._Wdafy_faInput .guangbiao {position: absolute;left: 10px;top:0.34rem;}._Wdafy_faInput .guangbiao img {width: 0.01rem;}._Wdafy_keyboard {width: 7.5rem;position: absolute;bottom: 0;}._Wdafy_keyboard li {width: 2.5rem;height: 1rem;border: 1px solid #BFBFBF;font-size: 0.6rem;background: #F5F5F5;float: left;line-height: 1rem;text-align: center;box-sizing: border-box;}._Wdafy_TopBackground {width: 7.5rem;text-align: center;line-height: 0.9rem;background: #F5F5F5;height: 0.9rem;}._Wdafy_faInput {position: relative; z-index: 100; text-align: center;background: #FFF; position: absolute; top: 2rem; margin: 0 auto; width: 6rem;padding: 0.6rem 0 0.7rem 0;border-radius: 0.3rem;left: 0;right: 0;margin: 0 auto;}._Wdafy_faInput input {width: 0.74rem;height: 0.74rem;background: #FFF;border: 1px solid #ccc;text-align: center;margin-left: 0.2rem;line-height: 0.5rem;float: left;display: block;}.keyboardbackground {width: 7.5rem;height: 100%;background: #000;opacity: 0.7;position: fixed;}.zfpassword {font-size: 0.3rem;margin-bottom: 0.2rem; }._Wdafy_faInput .close {position: absolute;top: 0rem;right: 0rem;z-index: 99999;}._Wdafy_faInput .close img { width: 0.78rem;height: 0.88rem;}。
HTML5 技术在移动应用开发中的应用

HTML5 技术在移动应用开发中的应用HTML5 技术是目前最火热的移动应用开发技术之一。
它为开发者提供了一种跨平台、可扩展、面向未来的开发方式,使得开发人员可以方便地建立一个高度交互性、多功能性和美观性的应用程序。
HTML5 被广泛应用于移动短信、游戏、电子商务、社交媒体、教育和娱乐等领域。
本文将深入分析 HTML5 技术在移动应用开发中的应用。
一、HTML5技术概述HTML5 技术是一种网页编程技术。
它不仅具有 HTML 和 CSS技术的全部优点,而且还提供了新的API 接口,例如geo-location、storage、websockets、buttons 等。
HTML5 还可以用于生成可离线工作在线内容,实现跨平台开发等。
二、HTML5在移动应用中的应用HTML5 技术支持复杂的交互,如手势识别、触摸、缩放等功能。
因此,它被普遍应用于移动应用程序的开发中,许多知名企业和开发者早已应用了这项技术。
下面我们将从以下几个方面来介绍它在移动应用程序中的应用。
1、移动应用程序的外观设计HTML5 技术可以根据不同的移动端设备进行适配,具有很强的扩展性和应用性。
使用这些技术可以生成数字图像、按钮、工具栏、翻页等,从而为移动应用程序提供最佳的用户体验。
2、移动应用程序的功能设计HTML5 技术支持在移动应用程序中添加许多功能,如地理位置、声音、视频、动画、游戏、在线储存和数据交换等。
在移动应用程序开发中,这些功能为用户提供了最佳的使用体验。
3、HTML5技术的易扩展性HTML5 技术可以扩展到许多不同的平台、操作系统和设备上。
它基于网络标准,因此非常适合跨平台开发和设备访问。
开发人员可以使用 HTML5 技术来设计一个面向未来的应用程序,同时最大限度地拓宽目标市场和用户群。
4、HTML5技术的移植性HTML5 技术不需要特定的操作系统或浏览器,只需要一台专门的服务器、一个浏览器和互联网连接就可以了。
这使得 HTML5 移植到不同的软硬件系统非常容易和灵活,同时也可以大大减少开发成本。
HTML5--新增表单元素属性事件(3)

HTML5--新增表单元素属性事件(3)前⾔: HTML5在原本已有表单元素的基础上新增了新的表单元素和属性,增强了表单元素的功能。
第⼀类.新增input(type)类型 1.type为email 作⽤:email 类型⽤于包含 email 地址的输⼊域。
特性:提供了默认电⼦邮箱的完整验证:要求必须包含@符号,同时必须包含服务器名称,如果不能满⾜验证,则会阻⽌当前的表单提交 email⽰例:如果内容不满⾜邮箱格式,提交表单会有错误提⽰信息。
<body><form action="#">邮箱:<input type="email"><input type="submit" value="提交"></form></body> 2.type为url 作⽤:url类型⽤于包含⽹址的输⼊域。
特性:提供了⽹址完整验证,只能输⼊合法的⽹址:必须包含http://(例:) url⽰例:如果内容不满⾜⽹址格式,提交表单会有错误提⽰信息。
<body><form action="#">⽹址:<input type="url"><input type="submit" value="提交"></form></body> 3.type为number 作⽤:number 类型⽤于包含数值的输⼊域。
特性:只能输⼊数字(包含⼩数点),不能输⼊其它的字符 属性: max -- 限制输⼊框的最⼤值 min -- 限制输⼊框的最⼩值 value -- 输⼊框的默认值 step -- 规定数字增长间隔 number⽰例:输⼊框中只能输⼊number类型值,不能输⼊其他类型的值<form action="#">数量:<input type="number" value="60" max="100" min="0" step="3"><br><input type="submit" value="提交"></form> 4.type为search 作⽤:search 类型⽤于搜索域,⽐如站点搜索或 Google 搜索 特性:输⼊值后,输⼊框后带有关闭按钮可以清除输⼊框内容 search⽰例:<body><form action="#">请输⼊商品名称:<input type="search"> <br><input type="submit" value="提交"></form></body> 5.type为range 作⽤:range 类型⽤于包含⼀定范围内数字值的输⼊域(可以⽤作⾳量键) 特性:显⽰为滑动条 属性: max -- 允许的最⼤值 min -- 允许的最⼩值 value -- 规定的默认值 step -- 规定数字增长间隔 range⽰例:<body><form action="#">范围:<input type="range" max="100" min="0" value="50"> <br><input type="submit" value="提交"></form></body> 6.type为color 作⽤:输⼊类型⽤于规定颜⾊ 特性:该类型允许你从拾⾊器中选取颜⾊ color⽰例:<body><form action="#">颜⾊:<input type="color"> <br><input type="submit" value="提交"></form></body> 7.type为tel 作⽤:tel 输⼊类型⽤于包含电话号码的输⼊字段 特性:tel它并不是来实现验证。
HTML5技术在移动开发中的应用

HTML5技术在移动开发中的应用随着移动设备的普及和应用的广泛,移动开发已经成为了现代互联网开发的重要分支。
然而,移动开发遇到的最大的问题之一便是设备的兼容性和多样性。
为了解决这些问题,HTML5技术应运而生,成为了移动开发的主要选择之一。
1. HTML5技术的优点首先,HTML5技术具有良好的兼容性和可移植性。
在不同的移动设备上,HTML5应用可以做到无需修改即可适应不同的屏幕大小和分辨率。
这是因为HTML5应用的布局和样式使用了流式的设计方式,能够让应用自适应设备的大小和分辨率。
此外,HTML5还具有跨平台的特点。
由于HTML5应用将程序逻辑和数据保存在服务器上,因此可以在不同的操作系统和硬件平台上运行,无需为每个平台分别编写不同的应用程序。
2. HTML5技术的应用场景HTML5技术可以应用于各种类型的移动应用,包括游戏、社交、商务、娱乐等领域。
其中,最为常见的应用场景包括:(1)跨平台应用开发HTML5技术的跨平台特点可以帮助开发者在不同的操作系统或设备上开发相同的应用,极大地提高开发效率和降低开发成本。
(2)游戏开发HTML5技术提供了强大的2D和3D图形处理能力,可以用于开发各种类型的网页游戏。
只要内置浏览器支持HTML5技术,用户即可在任何设备上玩游戏。
(3)移动网站和应用程序开发HTML5技术也可以用于开发移动网站和应用程序,这可以让用户在移动设备上使用与桌面网站类似的功能和用户界面。
3. HTML5技术的局限性虽然HTML5技术在移动开发中有很多优点,但同时也存在着一些局限性和不足。
例如:(1)性能问题在某些情况下,HTML5应用比原生应用的性能更差。
原因是HTML5应用需要通过Web技术来实现,而原生应用可以访问设备底层硬件和操作系统,因此其性能更快。
(2)安全问题HTML5应用运行在浏览器中,而浏览器本身存在安全漏洞。
这会导致HTML5应用容易受到各种攻击和漏洞利用,威胁用户的数据安全和隐私。
HTML5技术在移动开发中的应用

HTML5技术在移动开发中的应用在移动互联网时代,移动应用开发成为了一项重要的任务。
随着HTML5技术不断的成熟和发展,越来越多的移动应用开始采用HTML5技术进行开发。
本文将探讨HTML5技术在移动开发中的应用,以及其优势和潜在的挑战。
一、HTML5技术的优势1.多平台支持HTML5技术不仅可以在PC端使用,还可以在不同的移动设备上运行,如手机、平板电脑、电视机等。
这意味着一次开发能够支持多个平台,节省了开发成本和时间。
2.跨浏览器支持HTML5技术可以在多种不同的浏览器中运行,不会受到平台或浏览器的限制。
这使得开发人员能够更容易地实现跨平台兼容,确保应用能够在不同的设备上运行。
3.灵活性和易于维护HTML5技术的灵活性意味着开发人员可以更容易地对其进行修改和扩展,从而满足不同的需求。
此外,由于多次使用相同的代码和资源,维护应用程序变得更加容易。
4.良好的用户体验HTML5技术拥有强大的交互性、可视化和多媒体支持能力,可以提供更好的用户体验。
通过使用HTML5技术,开发人员可以制作出具有强大功能和视觉效果的应用。
二、HTML5技术的应用1.网页应用HTML5技术可以用于创建响应式的网页界面。
开发者可以使用HTML5标准中定义的新元素和属性,从而创建出更加丰富多彩的网站,包括全屏滚动、悬浮菜单和动态网页等。
2.移动应用HTML5技术也可以用于移动应用的开发。
利用HTML5技术,开发人员可以创建出可跨平台运行的应用程序,不需要对应用程序进行针对特定平台的编写。
此外,HTML5技术还支持离线应用和本地存储,使得应用程序与网络环境相对独立。
3.游戏开发HTML5技术已成为游戏开发人员的首选。
HTML5技术的动画和多媒体支持能够为游戏增加更多的效果,而HTML5技术还能够用于实现多人在线游戏。
三、HTML5技术的挑战1.性能问题虽然HTML5技术可以用于多种应用程序和游戏,但某些情况下性能可能会成为问题。
HTML5技术在移动应用开发中的应用

HTML5技术在移动应用开发中的应用移动应用开发已经成为现代互联网的重要组成部分,HTML5技术的广泛应用为移动应用开发带来了许多新的机遇和挑战。
在这篇文章中,我们将探讨HTML5技术在移动应用开发中的应用,分析其优点和局限性,以及未来的发展和前景。
HTML5技术是一种新兴的Web开发技术,可以在任何设备上运行,包括PC、移动设备和智能电视。
它是HTML标准的最新版本,与传统的HTML相比,具有更强的互动性和可扩展性。
HTML5具有以下几个主要特点:1. 支持移动设备。
HTML5可以在任何设备上运行,包括智能手机、平板电脑等移动设备。
2. 多媒体支持。
HTML5不仅支持图片和视频,还支持音频和动画。
3. 更强的互动性。
HTML5引入了很多新的API,包括拖放、本地存储、Web Socket等,可以实现更强的互动效果。
4. 更多的元素和属性。
HTML5中增加了很多新的元素和属性,包括画布、音频、视频、表单等,扩展了Web页面的功能和表现形式。
在移动应用开发中,HTML5技术的应用主要是通过Web App和Hybrid App两种方式实现。
Web App是基于Web技术开发的应用程序,可以通过浏览器访问和使用。
Web App不需要下载和安装,用户只需通过浏览器访问即可。
Web App的优点是跨平台、兼容性好、更新方便等,但是相对于Native App而言,体验要略逊一筹。
Hybrid App是Native App与Web App的结合体,它既可以获得高性能、良好的用户体验,又具备Web App的跨平台特性。
Hybrid App主要使用HTML5技术开发,与Native App结合,如利用PhoneGap、React Native等框架。
Hybrid App的优点是具有比Web App更好的用户体验,同时可以跨平台开发。
HTML5技术在移动应用开发中的优点1. 跨平台:使用HTML5技术可以跨平台开发,兼容性好,是一种非常方便的开发方式。
HTML5技术的基本知识和应用

HTML5技术的基本知识和应用HTML5,全称为超文本标记语言第5版,是Web开发领域的一个重要技术。
与之前的HTML版本相比,HTML5拥有更多的功能,能够支持更加复杂的内容和交互方式。
本文将介绍HTML5技术的基本知识和应用,让读者对该技术有更加深入的了解。
一、HTML5技术的基本知识1. HTML5的语法规范HTML5的语法规范与之前版本有所不同。
一般来说,HTML5的语法规范遵循以下几个原则:(1)只允许小写字母的标签和属性名。
(2)不需要关闭所有的标签,具体来说就是不需要在空标签中使用结束标记。
(3)可以包含自定义数据属性,即"data-"属性,这些属性可以用于存储页面元素的一些自定义数据。
2. HTML5的新增元素HTML5新增了很多元素,这些元素能够更加方便地实现各种功能。
下面是比较常用的几个元素:(1)Canvas元素:用于绘制图像、动画以及游戏等。
(2)Video元素:用于播放视频。
(3)Audio元素:用于播放音频。
(4)Article元素:表示一个独立的内容块,可以包含标题、作者、发布日期等元素。
(5)Section元素:表示文档中的一个段落。
3. HTML5的Web WorkersHTML5的Web Workers是一种新引入的技术,可以在后台运行脚本,而不会影响页面的性能。
Web Workers主要用于处理一些需要大量计算的任务,例如数据的处理和统计等。
Web Workers可以创建多个线程,使得页面能够更快地响应用户的操作。
二、HTML5技术的应用1. 移动应用开发HTML5技术可以用于开发移动应用,这种应用可以运行在多个平台上,例如iOS、Android等。
HTML5的移动应用可以使用框架,例如jQuery Mobile和Sencha Touch等框架,这些框架可以快速地构建出移动应用界面,并且可以实现很多很好看的效果。
使用HTML5技术开发移动应用还可以节省开发成本,同时对于一些简单的应用,使用HTML5技术需要的硬件资源很小,对于用户的手机影响也比较小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
密码键盘原理与HTML5应用随着银行卡的普及,密码键盘的使用频率越来越高,同时密码键盘也遭到各种攻击如通过窃听、流量分析的方法窃取密码键盘的敏感信息;通过恶意篡改、插入、删除、重放破坏设备通信的完整性,这些攻击都严重威胁到了银行和卡用户的信息安全。
因此密码键盘的高安全性对银行及卡用户都至关重要,本文对密码键盘安全认证、加密原理等进行了详细的阐述。
在2000年前,一直使用的是明文键盘,所有的密码数据都是明文传送至工控主板进行加密的,明文数据传输过程不安全且工控主板容易被攻破使得密码的安全性大大降低。
随着技术的发展,由美国国家标准局制定的DES加密应用到了密码键盘上,此时密码键盘才真正拥有了加密功能。
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来才用到密码键盘上,因此也称之为“国际算法”。
支付卡行业 (PCI) 安全标准委员会,对密码键盘的安全要求有了明确标准即PCI认证标准,PCI全称Payment Card Industry认证,是目前全球最严格、级别最高的金融机具安全认证标准。
在此之前,该标准为VISA认证,2006年后,世界5大支付机构(American Express, Discover Financial Services, JCB International, MasterCard Worldwide, and Visa Inc)联名成立了PCI 安全委员会,主要负责数据安全标准、支付应用数据安全标准及密码传输安全标准的制定等工作。
PCI组织要求,从2005年10月起,新POS机的PED(密码输入设备)必须通过产品安全认证;从2010年7月起,在网络中使用的全部PIN输入设备必须通过认证。
PCI认证从金融机具的物理安全性、逻辑安全性、联机安全性、脱机安全性、生产期间的设备安全管理、初始密钥注入前的设备安全管理等六个方面进行严格细致的检测,保证支付卡的设备安全。
PCI认证分PCI 1.X(1.0/1.1/1.2);PCI 2.X(2.1)(多了移机自毁功能,安全性能更高,2011年3月停止接受2.x认证);PCI3.X (3.0/3.1);PCI4.X (4.0/4.1)(4.1为目前PCI组织公布的最高认证标准)。
通过认证的产品PCI SSC会给它出具一份通过了PCI认证证书,并且会把通过了PCI认证的相关厂家产品公布在PCI SSC官网上,可在其官网进行查证。
中国银联参照其标准,于是又有了中国的PIN(Personal Identification Number)输入设备安全要求,PIN是指个人标识码,在金融行业,一般就是指个人密码。
目前国际通用的加密算法有DES,TDES,AES,RSA,ECC等,中国为了国家安全,推出了自己的国密算法,主要是SM2,SM3,SM4算法等等。
目前所用密码键盘主要可分为两类,一、全键盘,可参考证通电子的密码键盘ZT599(下图所示)及ZT938(多功能键盘);二是数字键盘(下图所示ZT598、ZT921),使用的密码键盘多为数字键盘。
同时从材质上也分为两大类:金属键盘(图中所示ZT599与ZT598)与非金属键盘(ZT921)。
金属密码键盘多用于银行ATM机等自助设备中,键盘一般嵌入设备中使用,通过坚固的金属材质及一系列特制的技术手段来达到防尘、防暴、防钻、防撬、防拆等特性。
非金属键盘主要用于POS机等需要输入密码的金融设备上配套使用,处于室环境,其外部材料要求没有金属密码键盘高。
ZT921.jpg (18.73 KiB) 查看 41 次ZT921ZT599.png (141.92 KiB) 查看 41 次ZT599ZT598.png (209.81 KiB) 查看 41 次ZT598本文以证通电子的金属密码键盘为例来讲述密码键盘的工作原理,先对密钥相关知识进行简要介绍。
密钥:密钥的本质是一种算法参数,它是在将明文数据转换成密文数据或将密文数据转换成明文数据的算法过程中的一个处理参数。
明文:指在加/解密过程中,没有经过处理的原始数据。
密文:指原始数据经过特殊处理之后,得到的一种与原始数据对应的新数据。
加密:指将明文数据转换成为密文数据的过程。
解密:指将密文数据转换成为明文数据的过程。
根密钥:用于处理主密钥的密钥。
根密钥只能是通过专用密钥POS下载。
密钥POS:俗称母POS,用于存储、传输密钥的一种专用设备。
PinBlock:卡号与密码经预处理后进行异或,通过DES加密后的密文数据块一般称为PinBlock。
密钥的下载可分为工作密钥和主密钥的下载。
工作密钥是用于处理用户数据、交易数据的密钥的总称。
工作密钥一般是通过签到交易、密钥更新交易获得,然后保存在设备中。
主密钥是用于处理工作密钥的密钥。
主密钥一般有2种获取方式:通过专用的密钥POS直接下载到密码设备中;通过签到交易、密钥更新交易获得,由根密钥进行处理。
工作密钥用来加密PIN或其他敏感信息,主密钥用来加解密工作密钥,提高工作密钥的安全性。
密码键盘中有多组工作密钥及主密钥,主密钥及工作密钥在下载时都有对应的密钥索引号,一对工作密钥与主密钥使用相同索引号。
对称密钥与非对称密钥。
对称密钥是指加密与解密使用的密钥是一致的,它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
非对称密钥是指加解密使用的是不同的密钥一般称为公钥和私钥,公钥是公开的,私钥是个人持有的,具有安全性高但加解密速度慢的特点。
对于非对称密钥,一般是公钥加密、私钥解密,私钥数字签名、公钥验证。
关于数字签名在ISO7498—2标准中定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。
发送方用接收方的公钥对报文进行加密,然后再用自己的私钥完成数字签名,将数字签名和报文传送给接收方。
接收方在收到密文和数字签名后,先用发送方提供的公钥进行验签,然后再用自己的私钥对密文进行解密,得到明文,确保发送方身份的准确性,以及报文并没有被篡改过。
验签过程是:接收方首先用发方公钥解密数字签名,导出报文摘要,并对电子文件原文作同样哈希算法得一个新的报文摘要,将两个摘要的哈希值进行结果比较,结果相同签名得到验证,否则签名无效。
这就是《电子签名法》中所要求的对签名不能改动,对签署的容和形式也不能改动的要求。
密码键盘的工作状态,其状态可分为出厂初始化,授权认证,密钥装载,正常工作和自毁状态。
出厂初始化:使用专用的安全密钥初始化工具对密码键盘进行密钥初始化。
主要操作为使用专业设备调用密码键盘生成两对密钥对,将公钥导出,并使用厂商私钥对导出的公钥对进行签名,将公钥和签名数据导入密码键盘,密码键盘使用厂商公钥进行验签,验签成功后保存公钥的签名,验签失败将密钥对进行删除。
密钥装载:包括通过密钥协商装载初始主密钥,密文装载密文主密钥和工作密钥。
为了保证产品密钥的安全,银行会对存储在产品中的密文主密钥或工作密钥进行定期更新。
授权认证:访问密码键盘的敏感信息和敏感服务都需要进行授权认证,通过授权管理员验证各自密码完成授权认证,主要是为了防止用户非法访问密码键盘敏感数据和敏感服务。
正常工作:完成密钥装载和授权认证后,产品进入正常工作状态,可以完成PIN 输入和PIN 加密功能。
自毁状态:密码键盘授权安装后,就不能被非法移除。
如果产品检测到恶意攻击,包括暴力拆卸获取敏感信息、非法移除等,产品将清除部所有敏感信息,停止正常工作,进入自毁状态。
接下来介绍密码键盘的使用流程,本文使用证通电子ZTTAF平台的密码键盘的使用为例,密码键盘的工作流程如下图所示。
在ZTTAF平台中打开密码键盘对应的API为Pinpad.ZTOpen(加参数)。
密钥下载对应API为Pinpad_DownloadKeyBegin(type),可下载工作密钥及主密钥。
为了防止密钥被非法使用,密钥在下载或前需确认主机身份的合法性,确保一台主机对应一台密码键盘。
密钥认证的过程,实际是使用认证密钥实现主机和密码键盘之间基于随机数的双向身份认证。
密码键盘通过扫描获取按键的值,按键的数字一般不通过上层软件,直接进入硬件处理,等到按键按完成后,硬件直接把经过处理的按键信息给上层软件,此时已经是密文了,将计算PinBlock的处理移到硬件里面去了,这种处理就被称为硬加密,能够进一步提高密码键盘中数据传输的安全性。
密钥键盘一般的运算包括DES加解密、MAC计算,DES加解密主是对敏感信息进行加解密,确保数据的安全;MAC计算主要是对报文进行处理,保证数据包在网络传输过程中数据不会被有意或无意的篡改,通过报文校验来确定报文是否被修改,提高数据传输过程中的安全性。
在该平台中密码键盘的接口execPinpad(CmdCode.DAM_CMD_PIN_XX_XX , send)是密码键盘进行数据处理的函数接口,数据的输入、DES加解密、mac计算等,接口原型及参数如下表所示:[接口原型 int ZTExec(int p_iCommand, QString p_sCmdData, int p_iIndex=0)功能执行命令返回值 >=0 接收命令成功< 0 接收命令失败参数输入\输出类型说明p_iCommand input int 命令ID 如OPEN、以CLOSE等p_sCmdData input QString 命令数据,JASON格式p_iIndex input int 命令序列号,保留]设备关闭所用API为Pinpad_close()。
密码键盘调用方法,TAF平台下JS调用密码键盘的部分功能代码。
[/code]//密码键盘操作函数代码: 全选function execPinpad(icmd, data){Pinpad.ZTExec(icmd,data,0,function(ret){}); //ZTTAF平台对应的//密码键盘操作接口}//打开设备代码: 全选function openPinpad(){try{output(1, "打开设备");Pinpad.ZTOpen(CmdCode.WFS_OPEN, 0, function(ret){});}catch(err){tips("js错误:"+ err);}}//下载密钥 type:1表示主密钥,2表示工作密钥function Pinpad_DownloadKey(type){if(1 == type){console.log("进入下载主密钥");//$('WorkKeyId1').style = "none";$('WorkKeyId1').attr("readonly","readonly");$('#DownLoadKeyLabel').text('下载主密钥');$('#DownLoadKeyLabel').attr('onclick', 'Pinpad_DownloadKeyBegin(1);'); //将主密钥下载到对应索引号地址}else{//$('#WorkKeyId1').style = "block";$('#DownLoadKeyLabel').text('下载工作密钥');$('#DownLoadKeyLabel').attr('onclick', 'Pinpad_DownloadKeyBegin(2);');}ShowDlg('DownLoadDlg');}//密钥下载入口function Pinpad_DownloadKeyBegin(type){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MK = $('#dlg #MainKeyId1').val();sCmdData.WK = $('#dlg #WorkKeyId1').val();sCmdData.KEYVALUE = $('#dlg #KeyValue1').val();sCmdData.KVCVALUE = $('#dlg #KVCValue1').val();var send = JSON.stringify(sCmdData);if(type == 1)output(1,"下载主密钥");elseoutput(1,"下载工作密钥");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_LOAD_KEY, send);}catch(err){tips("js错误:"+ err);}}//明文输入代码: 全选function PinpadGetKey(){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MAXLEN = $('#dlg #keyLength').val();sCmdData.AUTOEND = $('#dlg #endOuto').val();var send = JSON.stringify(sCmdData);output(1,"明文输入");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_GET_DATA, send);}catch(err){tips("js错误:"+ err);}}//密文输入 MINLEN、 MAXLEN输入长度的最小值与最大值代码: 全选function PinpadGetPin(){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MINLEN = $('#dlg#pinMinLength').val(); sCmdData.MAXLEN = $('#dlg #pinMaxLength').val();sCmdData.AUTOEND = $('#dlg #pinEndOuto').val();var send = JSON.stringify(sCmdData);output(1,"密文输入");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_GET_PIN , send);}catch(err){tips("js错误:"+ err);}}//获取PinBlock代码: 全选function Pinpad_getPinBlock(){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MK = $('#dlg #mainKeyNo').val();sCmdData.WK = $('#dlg #workKeyNo').val();sCmdData.CardNo = $('#dlg #cardNo').val();sCmdData.KeyFormat = $('#dlg #pswFormat').val();var send = JSON.stringify(sCmdData);output(1,"获取PinBlock");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_GET_PINBLOCK , send);}catch(err){tips("js错误:"+ err);}}//des加密被加密的数据一般是个人密码等敏感信息代码: 全选function Pinpad_desAddPin(){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MK = $('#dlg #mainKeyNo1').val(); //取主密钥sCmdData.WK = $('#dlg #workKeyNo1').val(); //取工作密钥sCmdData.TYPE = "1";sCmdData.DATA = $('#dlg #data1').val(); //被操作数据sCmdData.MODE = $('#dlg #addPinWay1').val();//加密模式var send = JSON.stringify(sCmdData);output(1,"des加密");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_CRYPT , send);}catch(err){tips("js错误:"+ err);}}//des解密代码: 全选try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MK = $('#dlg #mainKeyNo2').val();sCmdData.WK = $('#dlg #workKeyNo2').val();sCmdData.TYPE = "0";sCmdData.DATA = $('#dlg #data2').val();sCmdData.MODE = $('#dlg #addPinWay2').val();var send = JSON.stringify(sCmdData);output(1,"des解密");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_CRYPT , send);}catch(err){tips("js错误:"+ err);}}//MAC计算代码: 全选function Pinpad_calculateMAC(){try{$('#dlg').dialog('close');var sCmdData = {};sCmdData.MK = $('#dlg #mainKeyNo3').val(); //取主密钥sCmdData.WK = $('#dlg #workKeyNo3').val(); //取工作密钥sCmdData.DATA = $('#dlg #data3').val(); //被操作数据sCmdData.MODE = $('#dlg #macWay').val(); //模式var send = JSON.stringify(sCmdData);output(1,"MAC计算");output(0,send);execPinpad(CmdCode.DAM_CMD_PIN_MAC , send);}catch(err){tips("js错误:"+ err);}}//关闭设备代码: 全选try{output(1,"关闭设备");Pinpad.ZTClose(CmdCode.WFS_CLOSE, 0);}catch(err){tips("js错误:"+ err);}}。