CN104092683A - 一种pin码保护方法及系统 - Google Patents
一种pin码保护方法及系统 Download PDFInfo
- Publication number
- CN104092683A CN104092683A CN201410318395.XA CN201410318395A CN104092683A CN 104092683 A CN104092683 A CN 104092683A CN 201410318395 A CN201410318395 A CN 201410318395A CN 104092683 A CN104092683 A CN 104092683A
- Authority
- CN
- China
- Prior art keywords
- array
- index
- pin code
- byte data
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Control Of Vending Devices And Auxiliary Devices For Vending Devices (AREA)
- Cash Registers Or Receiving Machines (AREA)
Abstract
本发明公开了一种PIN码保护方法及系统,属于信息安全领域。所述方法包括读卡终端接收到用户输入的PIN码后根据与自身存储的类型标志对应的转换方法对PIN码进行转换得到转换后的PIN码,将转换后的PIN码和从与自身连接的卡片中获取到的主账号信息发送给服务器进行验证;服务器接收到读卡终端发送的主账号信息和转换后的PIN码后,从转换后的PIN码中获取类型标志的值,判断类型标志的类型,根据与类型标志对应的验证方法对转换后的PIN码进行验证。本发明的有益效果在于:读卡终端引入了主账号和/或伪随机数对PIN码进行加密处理,增加了PIN码的破解难度,能够有效保护PIN码在传输过程中的安全。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种PIN码保护方法及系统。
背景技术
PIN码是用来验证用户身份合法性的重要的用户数据,现有技术中,用户使用读卡终端时,读卡终端需要将获取到的用户数据发送到后台服务器进行验证,在上述发送过程中,用户数据多以明文或简单加密的方式进行发送,因此用户数据中的重要数据如PIN码等存在泄漏的风险。
发明内容
本发明的目的是为了克服现有技术的缺陷,提供一种PIN码保护方法及系统。
一方面,本发明提供一种PIN码保护方法,所述方法包括:
步骤S1:读卡终端接收到用户输入的PIN码后根据用户输入的PIN码得到第一PIN码数组,读取与自身建立连接的卡片中的主账号信息,读取自身存储的类型标志,并检查读取到的类型标志,若为第一标志或第二标志则执行步骤S2,若为第三标志则执行步骤S3;
步骤S2:所述读卡终端根据类型标志以及用户输入的PIN码的长度对所述第一PIN码数组进行第一预设处理,得到第一处理结果,根据读取到的主账号信息得到第一主账号数组,对所述第一主账号数组进行第二预设处理,得到第二处理结果,根据所述第一处理结果与所述第二处理结果进行预设运算,得到待加密数据,执行步骤S4;
步骤S3:所述读卡终端根据类型标志对所述第一PIN码数组进行所述第一预设处理,得到待加密数据,执行步骤S4;
步骤S4:所述读卡终端根据预设密钥,采用预设算法,对待加密数据进行加密得到转换后的PIN码,将读取到的主账号信息以及所述转换后的PIN码发送给服务器进行验证;
步骤S5:所述服务器接收到所述读卡终端发送的主账号信息以及转换后的PIN码后,根据接收到的主账号信息对接收到的转换后的PIN码进行验证,若验证通过,则允许所述读卡终端的后续访问,若验证未通过,则拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证未通过的提示信息。
另一方面,本发明提供一种PIN码保护系统,所述系统包括:读卡终端、服务器和与所述读卡终端连接的卡片;
所述读卡终端包括:
第一存储模块,用于存储类型标志和预设密钥;
第一接收模块,用于接收用户输入的PIN码,以及根据用户输入的PIN码得到第一PIN码数组;
读取模块,用于读取所述卡片中的主账号信息,以及根据读取到的主账号信息得到第一主账号数组;
检查模块,用于读取所述第一存储模块中存储的类型标志,以及检查读取到的类型标志;
第一处理模块,用于根据所述检查模块读取到的类型标志和所述第一接收模块接收到的PIN码的长度对所述第一接收模块得到的第一PIN码数组进行第一预设处理;
第二处理模块,用于对所述读取模块得到的第一主账号数组进行第二预设处理;
运算模块,用于对所述第一处理模块的处理结果与所述第二处理模块的处理结果进行预设运算;
加密模块,用于当所述检查模块判定读取到的类型标志为第一标志或第二标志时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述运算模块的运算结果进行加密得到转换后的PIN码,以及用于当所述检查模块判定读取到的类型标志为第三标志时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述第一处理模块的处理结果进行加密得到转换后的PIN码;
发送模块,用于将所述加密模块得到的转换后的PIN码和所述读取模块读取到的主账号信息发送给所述服务器进行验证;
所述服务器包括:
第二接收模块,用于接收所述读卡终端发送的主账号信息以及转换后的PIN码;
验证模块,用于根据所述第二接收模块接收到的主账号信息对所述第二接收模块接收到的转换后的PIN码进行验证;
响应模块,用于在所述验证模块验证通过时允许所述读卡终端的后续访问,以及在所述验证模块验证未通过时拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证未通过的提示信息。
本发明方法的有益效果在于,本发明中,读卡终端引入了主账号对PIN码进行加密处理,增加了PIN码的破解难度,读卡终端将上述加密处理后的PIN码传输给服务器进行验证,能够有效保护PIN码在传输过程中的安全。
附图说明
为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中提供的一种读卡终端加密PIN码方法的流程图;
图2和图3为本发明实施例2中提供的一种读卡终端加密PIN码方法的具体实现的流程图;
图4本发明实施例3中提供的一种服务器验证PIN码的方法流程图;
图5和图6为本发明实施例4中提供的一种服务器验证PIN码方法的具体实现的流程图;
图7为本发明实施例5中提供的一种PIN码保护系统的方框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明中的读卡终端中设置有应用处理器和安全处理器,且安全处理器不设置直接对外接口,实施例1提供的是本地更新方法,实施例2提供的是远程更新方法。
实施例1
本发明实施例提供一种PIN码保护方法中读卡终端加密PIN码的方法,如图1所示,所述方法具体包括:
步骤10:读卡终端接收到用户输入的PIN码后,根据用户输入的PIN码得到第一PIN码数组,读取与自身连接的卡片中的主账号信息;
步骤20:读卡终端读取自身存储的类型标志,并检查读取到的类型标志,若为第一标志或第二标志则执行步骤30,若为第三标志则执行步骤40;
步骤30:读卡终端根据类型标志以及用户输入的PIN码的长度对PIN码数组进行第一预设处理,得到第一处理结果,根据读取到的主账号信息得到第一主账号数组,对第一主账号数组进行第二预设处理,得到第二处理结果,根据第一处理结果和第二处理结果进行预设运算得到待加密数据,执行步骤50;
步骤40:读卡终端对第一PIN码数组进行第一预设处理,得到待加密数据,执行步骤50;
步骤50:读卡终端根据预设密钥,采用预设算法,对待加密数据进行加密,得到转换后的PIN码;
本实施例中,预设算法可以为任意加密算法,如DES、3DES、RSA等,预设密钥可以为预设数据,也可以为将预设数据经过相应变化得到的数据,在此不进行限定。
步骤60:读卡终端将读取到的主账号信息以及转换后的PIN码发送给服务器进行验证。
本实施例中,用第一数组存储第一PIN码数组的处理结果,对第一PIN码数组进行第一预设处理具体包括:
步骤A1:根据类型标志初始化第一数组;
具体地,当类型标志为第一标志时,初始化第一数组为包含预设个数的第一预设字节数据的数组;当类型标志为第二标志时,初始化第一数组为包含预设个数的第二预设字节数据的数组;
优选地,预设个数为8个,第一预设字节数据为0xFF,即当类型标志为第一标志时,初始化第一数组为0xFFFFFFFFFFFFFFFF,第二预设字节数据为0xAA或0xBB或0xCC或0xDD或0xEE或0xFF中的任意一个,例如,当类型为第二标志时,初始化第一数组为0xAAAAAAAAAAAAAAAA;
步骤A2:根据类型标志以及用户输入的PIN码的长度更新第一数组中的第一个字节数据;
步骤A3:根据第一PIN码数组中的数据更新第一数组中第一个字节数据之后的相应字节数据;
具体地,步骤A3包括:
步骤A3-1:判断第一PIN码数组的长度是否能够被2整除,是则执行步骤A3-2,否则执行步骤A3-3;
步骤A3-2:对第一PIN码数组中的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,步骤A3结束;
步骤A3-3:对第一PIN码数组中最后一个字节数据之前的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,对第一PIN码数组中最后一个字节数据进行第二预设转换,并用转换结果更新第一数组中的相应字节数据,步骤A3结束。
本实施例中,用第二数组存储第一主账号数组的处理结果,对第一主账号数组进行第二预设处理具体包括:
步骤B1:初始化第二数组;
具体地,初始化第二数组为包含预设个数的第五预设字节数据的数组;
优选地,预设个数为8个,第五预设字节数据为0x00,即初始化第二数组为0x0000000000000000;
步骤B2:根据第一主账号数组中的数据更新第二数组中的相应字节数据;
具体地,步骤B2包括:
步骤B2-1:判断第一主账号数组的长度是否小于第二预设长度,是则执行步骤B2-2,否则执行步骤B2-5;
步骤B2-2:判断第一主账号数组的长度能否被2整除,是则执行步骤B2-3,否则执行步骤B2-4;
步骤B2-3:对第一主账号数组中的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节数据,步骤B2结束;
步骤B2-4:对第一主账号数组中的第一个字节数据进行第四预设转换,并用转换结果更新第二数组中的相应字节数据,对第一主账号数组中第一个字节数据之后的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节数据,步骤B2结束;
步骤B2-5:对第一主账号数组中从低位端起,长度等于第二数组的长度的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节数据,步骤B2结束。
本实施例中,优选地,根据第一处理结果和第二处理结果进行异或运算得到待加密数据。
本实施例中,读卡终端根据自身存储的类型标志,选择相应的方法对PIN码进行加密后传输,能够灵活有效地保护PIN码在传输过程中的安全。
实施例2
本发明实施例提供一种PIN码保护方法中读卡终端加密PIN码的方法的具体实现,如图2和图3所示,具体包括:
步骤101:接收到用户输入的PIN码后,根据用户输入的PIN码得到第一PIN码数组,读取与自身连接的卡片中的主账号信息;
本实施例中,对PIN码进行ASCII码转换得到第一PIN码数组;
例如,若用户输入的PIN码为123456,则得到的第一PIN码数组为0x313233343536。
步骤102:检查自身存储的类型标志,若类型标志为第一标志则执行步骤103,若类型标志为第二标志则执行步骤104,若类型标志为第三预设标志则执行步骤124;
具体地,读卡终端判断类型标志的值,若类型标志的值为0则类型标志为第一标志,若类型标志的值为3则类型标志为第二标志,若类型标志的值为1则类型标志为第三标志。
步骤103:初始化第一数组为包含预设个数的第一预设字节数据的数组,执行步骤105;
具体地,本实施例中,预设个数为8个,第一预设字节数据为0xFF,步骤103中初始化第一数组为0xFFFFFFFFFFFFFFFF。
步骤104:初始化第一数组为包含预设个数的第二预设字节数据的数组,执行步骤105;
具体地,本实施例中,预设个数为8个,第二预设字节数据为0xAA或0xBB或0xCC或0xDD或0xEE或0xFF,步骤104中初始化第一数组为0xAAAAAAAAAAAAAAAA。
步骤105:初始化第一索引,作为第一PIN码数组和第一数组的索引;
本实施例中,第一索引的初始值为0。
步骤106:根据类型标志的值和用户输入的PIN码的长度设置第一数组中与第一索引的当前值对应的字节数据;
具体地,本实施例中,设置第一数组中与第一索引的当前值对应的字节数据的前半字节等于类型标志的值,设置第一数组中与第一索引的当前值对应的字节数据的后半字节等于PIN码数组的长度;
例如,用户输入的PIN码的长度为6,当类型标志的值为0时,当前第一数组为0xFFFFFFFFFFFFFFFF,设置第一数组中与第一索引的当前值对应的字节数据为0x06,第一数组被修改为0x06FFFFFFFFFFFFFF;当类型标志的值为3,当前第一数组为0xAAAAAAAAAAAAAAAA时,设置第一数组中与第一索引的当前值对应的字节数据为0x36,第一数组被修改为0x36AAAAAAAAAAAAAA。
步骤107:根据第一PIN码数组中与第一索引的当前值的二倍对应的字节数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
具体地,本实施例中,步骤107包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将第一PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,本实施例中,第三字节数据为0x30,步骤107包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第一数据,将第一PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去0x30后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
例如,第一PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置pbFormatPIN(i+1)的值为(pbPIN[2*i]-0x30)<<4|(pbPIN[2*i+1]-0x30),pbPIN具体为0x313233343536,i的当前值为0则设置pbFormatPIN(1)=(pbPIN[0]-0x30)<<4|(pbPIN[1]-0x30)=(0x31-0x30)<<4|(0x32-0x30)=0x01<<4|0x02=0x10|0x02=0x12;
若当前pbFormatPIN为0x06FFFFFFFFFFFFFF,则pbFormatPIN被修改为0x0612FFFFFFFFFFFF;
若当前pbFormatPIN为0x36AAAAAAAAAAAAAA,则pbFormatPIN被修改为0x3612AAAAAAAAAAAA。
步骤108:更新第一索引的值为其当前值加上预设步长;
具体地,本实施例中,预设步长为1,步骤108具体为:更新第一索引的值为其当前值加1;
例如,第一索引的当前值为0,则更新第一索引的值为1。
步骤109:判断第一索引的值是否小于第一PIN码数组的长度的二分之一取整,是则返回步骤107,否则执行步骤110;
例如,若第一PIN码数组的长度为6个字节,则判断第一索引的值是否小于3,若第一PIN码数组的长度为5个字节,则判断第一索引的值是否小于2。
步骤110:判断第一PIN码数组的长度是否能被2整除,是则执行步骤112,否则执行步骤111;
优选地,本实施例中,步骤110包括:判断第一PIN码数组的长度对2取余得到的余数是否为0,是则第一PIN码数组的长度能被2整除,执行步骤112,否则第一PIN码数组的长度不能被2整除,执行步骤111;
例如,若第一PIN码数组的长度为6个字节,第一PIN码数组的长度对2取余得到的余数为0,则确定第一PIN码数组的长度能被2整除;若第一PIN码数组的长度为5个字节,第一PIN码数组的长度对2取余得到的余数为1,则确定第一PIN码数组的长度不能被2整除。
步骤111:根据第一PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据,执行步骤112;
具体地,本实施例中,步骤111包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据,将第三数据与第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,本实施例中,第四预设字节数据为0x0F,步骤111包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与0x0F进行与运算得到第四数据,将第三数据和第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
例如,第一PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置pbFormatPIN(i+1)的值为(pbPIN[2*i]-0x30)<<4|(pbFormatPIN[1+i]&0x0F),pbPIN具体为0x3132333435,i的当前值为2:
若当前pbFormatPIN为0x051234FFFFFFFFFF,则设置pbFormatPIN(3)=(pbPIN[4]-0x30)<<4|(pbFormatPIN(3)&0x0F)=(0x35-0x30)<<4|(0xFF&0x0F)=0x05<<4|0x0F=0x50|0x0F=0x5F,pbFormatPIN被修改为0x0512345FFFFFFFFF;
若当前pbFormatPIN为0x351234AAAAAAAAAAAA,则设置pbFormatPIN(3)=(pbPIN[4]-0x30)<<4|(pbFormatPIN(3)&0x0F)=(0x35-0x30)<<4|(0xAA&0x0F)=0x05<<4|0x0A=0x50|0x0A=0x5A,pbFormatPIN被修改为0x3512345AAAAAAAAAAAAA。
步骤112:根据读取到的主账号信息得到第一主账号数组,并初始化第二数组;
本实施例中,对主账号信息进行ASCII码转换得到第一主账号数组;
例如,若主账号信息为621700137000807602,则得到的第一主账号数组为0x363231373030313337303030383037363032。
具体地,本实施例中,初始化第二数组为包含预设个数的第五预设字节数据的数组;
优选地,本实施例中,预设个数为8个,第五预设字节数据为0x00,初始化第二数组0x0000000000000000。
步骤113:初始化第二索引和第三索引,将第二索引作为第二数组的索引,将第三索引作为第一主账号数组的索引;
本实施例中,第二索引的初始值为2,第三索引的初始值为0。
步骤114:检查第一主账号数组的长度,若小于第二预设长度则执行步骤115,若大于第二预设长度则执行步骤119,若等于第二预设长度则执行步骤120;
具体地,本实施例中,根据第二数组的长度确定第二预设长度,第二预设长度等于第二数组的长度减去2个字节后与2的乘积;
优选地,本实施例中,第二数组的长度为8个字节,第二预设长度为12个字节。
步骤115:计算第二预设长度与第一主账号数组的长度的差值的二分之一取整,更新第二索引的值为其当前值加上计算结果;
本实施例中,第二预设长度为12个字节,例如,第一主账号数组的长度为5个字节,第二索引的当前值为2,则更新第二索引的值为5。
步骤116:判断第一主账号数组的长度是否能被2整除,是则执行步骤120,否则执行步骤117;
优选地,本实施例中,步骤116包括:判断第一主账号数组的长度对2取余得到的余数是否为0,是则第一主账号数组的长度能被2整除,执行步骤120,否则第一主账号数组的长度不能被2整除,执行步骤117;
例如,若第一主账号数组的长度为18个字节,第一主账号数组的长度对2取余得到的余数为0,则确定第一主账号数组的长度能被2整除,执行步骤120;
若第一主账号数组的长度为5个字节,第一主账号数组的长度对2取余得到的余数为1,则确定第一主账号数组的长度不能被2整除,执行步骤117。
步骤117:根据第一主账号数组中与第三索引的值对应的字节数据进行计算,用计算结果更新第二数组中与第二索引当前值对应的字节数据;
具体地,本实施例中,步骤117包括:将第一主账号数组中与第三索引的值对应的字节数据减去第三预设字节数据得到第四数据,用第四数据更新第二数组中与第二索引当前值对应的字节数据;
优选地,本实施例中,第三预设字节数据为0x30,步骤117包括:将第一主账号数组中与第三索引的值对应的字节数据减去0x30得到第四数据,用第四数据更新第二数组中与第二索引当前值对应的字节数据;
例如,第一主账号数组为pbPAN,第二数组为pbFormatPAN,第二索引为bIndex,第三索引为bPANIndex,则设置pbFormatPAN[bIndex]的值为pbPAN[bPANIndex]-0x30,若pbPAN具体为0x3534333231,bIndex的当前值为5,bPANIndex的当前值为0,当前pbFormatPAN为0x0000000000000000,则设置pbFormatPAN[5]=pbPAN[0]-0x30=0x35-0x30=0x05,pbFormatPAN被修改为0x0000000000050000。
步骤118:更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长,执行步骤120;
具体地,本实施例中,预设步长为1,步骤118中,更新第二索引的值为其当前值加1,更新第三索引的值为其当前值加1;
例如,第二索引的当前值为5,第三索引的当前值为0,则更新第二索引的值为6,更新第三索引的值为1。
步骤119:更新第三索引的值为第一主账号数组的长度与第二预设长度的差值;
本实施例中,第二预设长度为12个字节,例如,第一主账号数组的长度为18个字节,第三索引的当前值为0,则更新第三索引的值为6。
步骤120:根据第一主账号数组中与第三索引的当前值对应的字节数据以及与第三索引的当前值加1对应的字节数据进行计算,用计算结果更新第二数组中与第二索引的当前值对应的字节数据;
具体地,本实施例中,步骤120包括:将第一主账号数组中与第三索引的当前值对应的字节数据减去第三预设字节数据后左移4位得到第五数据,将第一主账号数组中与第三索引的当前值加1对应的字节数据减去第三预设字节数据后得到第六数据,将第五数据和第六数据进行或运算,用或运算结果更新第二数组中与第二索引的当前值对应的字节数据;
优选地,本实施例中,第三预设字节数据为0x30,步骤120包括:将第一主账号数组中与第三索引的当前值对应的字节数据减去0x30后左移4位得到第五数据,将第一主账号数组中与第三索引的当前值加1对应的字节数据减去0x30后得到第六数据,将第五数据和第六数据进行或运算,用或运算结果更新第二数组中与第二索引的当前值对应的字节数据;
例如,第一主账号数组为pbPAN,第二数组为pbFormatPAN,第二索引为bIndex,第三索引为bPANIndex,则设置pbFormatPAN[bIndex]的值为(pbPAN[bPANIndex]-0x30)<<4|(pbPAN[bPANIndex+1]-0x30):
若pbPAN具体为0x3534333231,bIndex的当前值为6,bPANIndex的当前值为1,当前pbFormatPAN为0x0000000000005000,则设置pbFormatPAN[6]=(pbPAN[1]-0x30)<<4|(pbPAN[2]-0x30)=(0x34-0x30)<<4|(0x33-0x30)=0x04<<4|0x03)=0x40|0x03=0x43,pbFormatPAN被修改为0x0000000000054300;
若pbPAN具体为0x363231373030313337303030383037363032,bIndex的当前值为2,bPANIndex的当前值为6,当前pbFormatPAN为0x0000000000000000,则设置pbFormatPAN[2]=(pbPAN[6]-0x30)<<4|(pbPAN[7]-0x30)=(0x31-0x30)<<4|(0x33-0x30)=0x01<<4|0x03)=0x10|0x03=0x13,pbFormatPAN被修改为0x0000130000000000。
步骤121:更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
具体地,本实施例中,预设步长为1,步骤121具体为:更新第二索引的值为其当前值加1,更新第三索引的值为其当前值加1;
例如,第二索引的当前值为2,第三索引的当前值为6,则更新第二索引的值为3,更新第三索引的值为7。
步骤122:判断第二索引的值是否小于预设值,是则返回步骤120,否则执行步骤123;
本实施例中,预设值为8。
步骤123:根据第一数组中的数据和第二数组中的数据计算得到待加密数据,执行步骤133;
具体地,本实施例中,步骤123包括:将第一数组中的数据和第二数组中的数据进行异或运算,得到待加密数据;
例如,当前第二数组为0x0000137000807602:
若当前第一数组为0x06123456FFFFFFFF,则将0x06123456FFFFFFFF和0x0000137000807602进行异或运算,得到待加密数据0x06122726FF7F89FD;
若当前第一数组为0x36123456AAAAAAAA,则将0x36123456AAAAAAAA和0x0000137000807602进行异或运算,得到待加密数据0x36122726AA2ADCA8。
步骤124:初始化第一数组为包含第一预设长度的随机数的数组;
具体地,本实施例中,第一预设长度为8个字节,步骤124中初始化第一数组为包含长度为8个字节的随机数的数组;
例如,初始化第一数组为0x5D1310C8118E56E8。
步骤125:初始化第一索引,作为第一PIN码数组和第一数组的索引;
本实施例中,第一索引的初始值为0。
步骤126:根据类型标志的值和第一PIN码数组的长度设置第一数组中与第一索引的当前值对应的字节数据;
具体地,本实施例中,设置第一数组中与第一索引的当前值对应的字节数据的前半字节等于类型标志的值,设置第一数组中与第一索引的当前值对应的字节数据的后半字节等于第一PIN码数组的长度;
例如,第一PIN码数组的长度为6个字节,当类型标志的值为1,当前第一数组为0x5D1310C8118E56E8时,设置第一数组中与第一索引的当前值对应的字节数据为0x16,第一数组被修改为0x161310C8118E56E8。
步骤127:根据第一PIN码数组中与第一索引的当前值的二倍对应的字节数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
具体地,本实施例中,步骤127包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将第一PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,本实施例中,第三字节数据为0x30,步骤127包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第一数据,将第一PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去0x30后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
例如,第一PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置pbFormatPIN(i+1)的值为(pbPIN[2*i]-0x30)<<4|(pbPIN[2*i+1]-0x30),pbPIN具体为0x313233343536,i的当前值为0,当前pbFormatPIN为0x161310C8118E56E8,则设置pbFormatPIN(1)=(pbPIN[0]-0x30)<<4|(pbPIN[1]-0x30)=(0x31-0x30)<<4|(0x32-0x30)=0x01<<4|0x02=0x10|0x02=0x12,pbFormatPIN被修改为0x161210C8118E56E8。
步骤128:更新第一索引的值为其当前值加上预设步长;
步骤129:判断第一索引的值是否小于第一PIN码数组的长度的二分之一取整,是则返回步骤127,否则执行步骤130;
步骤130:判断第一PIN码数组的长度是否能被2整除,是则执行步骤132,否则执行步骤131;
本实施例中,步骤128至步骤130的具体实现方法与步骤108至步骤110的具体实现方式相同,在此不再赘述。
步骤131:根据第一PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据,执行步骤132;
具体地,本实施例中,步骤131包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据,将第三数据与第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,本实施例中,第三预设字节数据为0x30,第四预设字节数据为0x0F,步骤131包括:将第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与0x0F进行与运算得到第四数据,将第三数据和第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
例如,第一PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置pbFormatPIN(i+1)的值为(pbPIN[2*i]-0x30)<<4|(pbFormatPIN[1+i]&0x0F),当pbPIN具体为0x3132333435,i的当前值为2,当前pbFormatPIN为0x151234C8118E56E8,则设置pbFormatPIN(3)=(pbPIN[4]-0x30)<<4|(pbFormatPIN(3)&0x0F)=(0x35-0x30)<<4|(0xC8&0x0F)=0x05<<4|0x08=0x50|0x08=0x58,pbFormatPIN被修改为0x15123458118E56E8。
步骤132:将第一数组中的数据作为待加密数据,执行步骤133;
步骤133:根据预设密钥,采用预设算法,对待加密数据进行加密,得到转换后的PIN码;
本实施例中,预设算法可以为任意加密算法,如DES、3DES、RSA等,预设密钥可以为预设数据,也可以为将预设数据经过相应变化得到的数据,在此不进行限定。
优选地,本实施例中,预设算法为3DES算法,预设密钥为预设数据;例如预设密钥为0xDEF39DCB7A09E93EBFD13BB49B4C4165:
若待加密数据为0x06122726FF7F89FD,则根据预设密钥,采用3DES算法,对0x06122726FF7F89FD进行加密,得到转换后的PIN码为0x06077A61308A4EF8;
若待加密数据为0x36122726AA2ADCA8,则根据预设密钥,采用3DES算法,对0x36122726AA2ADCA8进行加密,得到转换后的PIN码为0xC4911275AFEE840D;
若待加密数据为0x16123456118E56E8,则根据预设密钥,采用3DES算法,对0x16123456118E56E8进行加密,得到转换后的PIN码为0xEBE15EE314ADA31A。
步骤134:将主账号信息以及转换后的PIN码发送到服务器进行验证。
本实施例提供的方法中,读卡终端引入了主账号和/或伪随机数对PIN码进行加密处理,增加了PIN码的破解难度,读卡终端将上述加密处理后的PIN码传输给服务器进行验证,能够有效保护PIN码在传输过程中的安全,当引入伪随机数时还能同时起到防止重放攻击的作用。
实施例3
本发明实施例提供一种PIN码保护方法中服务器验证PIN码的方法,如图4所示,所述方法具体包括:
步骤70:服务器接收到读卡终端发送的主账号信息以及转换后的PIN码后,对转换后的PIN码进行解密,得到明文数据,读取自身存储的与接收到的主账号信息对应的PIN码,根据读取到的PIN码得到第二PIN码数组;
本实施例中,服务器采用与读卡终端相对应的密钥和算法对接收到的转换后的PIN码解密,在此不再赘述。
步骤80:服务器从明文数据中获取用户输入的PIN码的长度,判断获取到的用户输入的PIN码的长度是否等于读取到的与接收到的主账号信息对应的PIN码的长度,是则执行步骤90,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的提示信息;
本实施例中,服务器从明文数据的第一个字节数据中获取用户输入的PIN码的长度。
步骤90:服务器从明文数据中获取类型标志的值,根据类型标志的值判断类型标志的类型,若为第一标志或第二标志则执行步骤A0,若为第三标志则执行步骤B0;
本实施例中,服务器从明文数据的第一个字节数据中获取预设标志。
步骤A0:服务器对第二PIN码数组进行第一预设处理,得到第三处理结果,根据接收到的主账号信息得到第二主账号数组,对第二主账号数组进行第二预设处理,得到第四处理结果,根据第三处理结果和第四处理结果进行预设运算,得到验证数据,执行步骤C0;
本实施例中,服务器对第二PIN码数组进行第一预设处理的方法与实施例一中读卡终端对第一PIN码数组进行第一预设处理的方法相同,服务器对第二主账号数组进行第二预设处理的方法与实施例一中读卡终端对第一主账号数组进行第二预设处理的方法相同,在此不再赘述;
优选地,本实施例中,服务器根据第三处理结果和第四处理结果进行异或运算得到验证数据。
步骤B0:服务器对第二PIN码数组进行第一预设处理,得到验证数据,执行步骤C0;
本实施例中,服务器对第二PIN码数组进行第一预设处理的方法与实施例一中读卡终端对第一PIN码数组进行第一预设处理的方法相同,在此不再赘述。
步骤C0:服务器根据与接收到的主账号信息相对应的PIN码的长度判断验证数据中与PIN码相关部分的数据和明文数据中与PIN码相关部分的数据是否一致,是则验证通过,允许读卡终端的后续访问,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的提示信息。
本实施例提供一种对根据实施例1提供的方法得到的转换后的PIN码进行验证的方法,结合实施例1中的度卡终端加密PIN码的方法,形成安全有效的PIN码保护方法。
实施例4
本发明实施例提供一种PIN码保护方法中服务器验证PIN码的方法,如图5和图6所示,所述方法具体包括:
步骤201:服务器接收到读卡终端发送的主账号信息以及转换后的PIN码后,对接收到的转换后的PIN码解密,读取自身存储的与接收到的主账号信息对应的PIN码,根据读取到的PIN码得到第二PIN码数组;
本实施例中,服务器采用与读卡终端相对应的密钥和算法对接收到的转换后的PIN码解密;
例如,与读卡终端相对应的密钥为0xDEF39DCB7A09E93EBFD13BB49B4C4165,与读卡终端相对应的算法为3DES:
若转换后的PIN码为0x06077A61308A4EF8,则解密后得到的明文数据为0x06122726FF7F89FD;
若转换后的PIN码为0xC4911275AFEE840D,则解密后得到的明文数据为0x36122726AA2ADCA8;
若转换后的PIN码为0x EBE15EE314ADA31A,则解密后得到的明文数据为0x16123456118E56E8。
步骤202:读取解密得到的明文数据中的第一个字节数据,根据读取到的字节数据得到类型标志的值和用户输入的PIN码的长度;
具体地,本实施例中,根据明文数据中的第一个字节数据的前半个字节得到类型标志的值,根据明文数据中的第一个字节数据的后半个字节得到用户输入的PIN码的长度;
例如,读取到的字节数据为0x06,则得到类型标志的值为0,用户输入的PIN码的长度为6。
步骤203:判断用户输入的PIN码的长度是否等于与接收到的主账号信息对应的PIN码的长度,是则执行步骤204,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的提示信息;
步骤204:根据得到的类型标志的值判断类型标志的类型,若为第一标志则执行步骤205,若为第二标志则执行步骤206,若为第三标志则执行步骤225;
具体地,本实施例中,检查得到的类型标志的值,若为0则类型标志为第一标志,若为3则类型标志为第二标志,若为1则类型标志为第三标志。
步骤205:初始化第一数组为包含预设个数的第一预设字节数据的数组,执行步骤207;
本实施例中,预设个数为8个,第一预设字节数据为0xFF,步骤205中初始化第一数组为0xFFFFFFFFFFFFFFFF。
步骤206:初始化第一数组为包含预设个数的第二预设字节数据的数组,执行步骤207;
本实施例中,第二预设字节数据为0xAA或0xBB或0xCC或0xDD或0xEE或0xFF;
例如,初始化第一数组为0xAAAAAAAAAAAAAAAA。
步骤207:初始化第一索引,作为第二PIN码数组和第一数组的索引;
本实施例中,第一索引的初始值为0。
步骤208:根据第二PIN码数组中与第一索引的当前值的二倍对应的字节数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
步骤209:更新第一索引的值为其当前值加上预设步长;
步骤210:判断第一索引的值是否小于第二PIN码数组的长度的二分之一取整,是则返回步骤208,否则执行步骤209;
步骤211:判断第二PIN码数组的长度是否能被2整除,是则执行步骤213,否则执行步骤212;
步骤212:根据第二PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据,执行步骤213;
本实施例中,步骤208至步骤212的具体实现方法与实施例二中步骤107至步骤111的具体实现方法相同,在此不再赘述。
步骤213:根据接收到的主账号信息得到第二主账号数组,并初始化包含预设个数的第五字节数据的第二数组;
本实施例中,对主账号信息进行ASCII码转换得到第二主账号数组;
例如,接收到的主账号信息为621700137000807602,则得到的第二主账号数组为0x363231373030313337303030383037363032;
本实施例中,优选地,预设个数为8,第五预设字节数据为0x00。
步骤214:初始化第二索引和第三索引,将第二索引作为第二数组的索引,将第三索引作为第二主账号数组的索引;
本实施例中,第二索引的初始值为2,第三索引的初始值为0。
步骤215:检查第二主账号数组的长度,若小于第二预设长度则执行步骤216,若大于第二预设长度则执行步骤220,若等于第二预设长度则执行步骤221;
本实施例中,第二预设长度为12个字节。
步骤216:计算第二预设长度与第二主账号数组的长度的差值的二分之一,更新第二索引的值为其当前值加上计算结果;
步骤217:判断第二主账号数组的长度是否能被2整除,是则执行步骤221,否则执行步骤218;
步骤218:根据第二主账号数组中与第三索引的值对应的字节数据进行计算,用计算结果更新第二数组中与第二索引当前值对应的字节数据;
步骤219:更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长,执行步骤221;
步骤220:更新第三索引的值为第二主账号数组的长度与第二预设长度的差值;
步骤221:根据第二主账号数组中与第三索引的当前值对应的字节数据以及与第三索引的当前值加1对应的字节数据进行计算,用计算结果更新第二数组中与第二索引的当前值对应的字节数据;
步骤222:更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
步骤223:判断第二索引的值是否小于预设值,是则返回步骤221,否则执行步骤224;
本实施例中,步骤214至步骤223的具体实现方法与实施例二中步骤113至步骤122的具体实现方法相同,在此不再赘述。
步骤224:根据第一数组中的数据和第二数组中的数据进行计算,得到验证数据,执行步骤233;
具体地,本实施例中,将第一数组中的数据和第二数组中的数据进行异或运算,得到验证数据;
例如,第一数组具体为0xFF123456FFFFFFFF,第二数组具体为0x0000137000807602,则将0xFF123456FFFFFFFF和0x0000137000807602进行异或运算,得到验证数据0xFF122726FF7F89FD。
步骤225:初始化第一数组为包含第一预设长度的随机数的数组;
具体地,步骤225中,初始化第一数组为包含长度为8个字节的随机数的数组。
步骤226:初始化第一索引,作为第二PIN码数组和第一数组的索引;
步骤227:根据第二PIN码数组中与第一索引的当前值的二倍对应的字节数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
步骤228:更新第一索引的值为其当前值加上预设步长;
步骤229:判断第一索引的值是否小于第二PIN码数组的长度的二分之一取整,是则返回步骤227,否则执行步骤230;
步骤230:判断第二PIN码数组的长度是否能被2整除,是则执行步骤232,否则执行步骤231;
步骤231:根据第二PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据,执行步骤232;
本实施例中,步骤226至步骤231的具体实现方法与步骤207至步骤212的具体实现方法相同,在此不再赘述。
步骤232:将第一数组中的数据作为验证数据,执行步骤233;
步骤233:根据与接收到的主账号信息相对应的PIN码的长度判断验证数据与明文数据中的相应数据是否一致,是则验证通过,允许读卡终端的后续访问,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的提示信息。
例如,PIN码的长度为6,则判断验证数据中的第二字节至第四字节与明文数据中的第二字节至第四字节是否一致,若验证数据具体为FF122726FF7F89FD,明文数据具体为36122726AA2ADCA8,经判断验证数据的第二字节至第四字节与明文数据的第二字节至第四字节均为122726,验证通过。
本实施例提供一种对根据实施例2中提供的方法生成的转换后的PIN码进行验证的方法,结合实施例2中提供的读卡终端加密PIN码的方法,形成安全有效的PIN码保护方法。
实施例5
本实施例提供一种PIN码保护系统,所述系统包括读卡终端1、服务器2和与所述读卡终端建立连接的卡片3,如图7所示:
读卡终端1包括:
第一存储模块11,用于存储类型标志和预设密钥;
第一接收模块12,用于接收用户输入的PIN码,以及根据用户输入的PIN码得到第一PIN码数组;
读取模块13,用于读取卡片3中的主账号信息,以及根据读取到的主账号信息得到第一主账号数组;
检查模块14,用于读取第一存储模块11中存储的类型标志,以及检查读取到的类型标志;
第一处理模块15,用于根据检查模块14读取到的类型标志和第一接收模块12接收到的PIN码的长度对第一接收模块12得到的第一PIN码数组进行第一预设处理;
具体地,本实施例中,第一处理模块15具体包括:
第一初始化子模块,用于根据检查模块14读取到的类型标志初始化第一数组;
优选地,第一初始化子模块具体用于:当检查模块14判定读取到的类型标志为第一标志时,初始化第一数组为包含预设个数的第一预设字节数据的数组;当检查模块14判定读取到的类型标志为第二标志时,初始化第一数组为包含预设个数的第二预设字节数据的数组;以及当检查模块14判定读取到的类型标志为第三标志时,初始化第一数组为包含预设长度的随机数的数组,所述预设长度具体为预设个数个字节;
第一更新子模块,用于根据第一接收模块12接收到的PIN码的长度以及检查模块14读取到的类型标志更新第一数组中的第一个字节数据;
第二更新子模块,用于根据第一接收模块12得到的第一PIN码数组中的数据更新第一数组中第一个字节数据之后的相应字节数据;
优选地,第二更新子模块具体用于:判断读取模块13得到的第一PIN码数组的长度是否能被2整除,以及当判定结果为是时对第一PIN码数组中的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,当判定结果为否时对第一PIN码数组中最后一个字节数据之前的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,对第一PIN码数组中最后一个字节数据进行第二预设转换,并用转换结果更新第一数组中的相应字节数据。
第二处理模块16,用于对读取模块13得到的第一主账号数组进行第二预设处理;
具体地,本实施例中,第二处理模块16具体包括:
第二初始化子模块,用于初始化第二数组;
优选地,第二初始化子模块具体用于:初始化第二数组为包含预设个数的第五预设字节数据的数据;
第三更新子模块,用于根据读取模块13得到的第一主账号数组中的数据更新第二数组中的相应字节数据;
优选地,第三更新子模块具体用于:判断读取模块13得到的第一主账号数组的长度是否小于第二预设长度,若不小于则对第一主账号数组中从低位端起,长度等于第二预设长度的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节数据;若小于则判断第一主账号数组的长度能否被2整除,若能整除则对第一主账号数组中的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节数据,若不能整除则对第一主账号数组中的第一个字节数据进行第四预设转换,并用转换结果更新第二数组中的相应字节数据,对第一主账号数组中第一个字节数据之后的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果替换第二数组中的相应字节数据。
运算模块17,用于对第一处理模块15的处理结果与第二处理模块16的处理结果进行预设运算;
本实施例中,运算模块17具体用于对第一处理模块15的处理结果与第二处理模块16的处理结果进行异或运算。
加密模块18,用于当检查模块14判定读取到的类型标志为第一标志或第二标志时,根据第一存储模块11中存储的预设密钥、采用预设算法,对运算模块17的运算结果进行加密得到转换后的PIN码,以及用于当检查模块14判定读取到的类型标志为第三标志时,根据第一存储模块11中存储的预设密钥、采用预设算法,对第一处理模块15的处理结果进行加密得到转换后的PIN码;
发送模块19,用于将加密模块18得到的转换后的PIN码和读取模块13读取到的主账号信息发送给服务器2进行验证。
进一步地:
本实施例中,第一初始化子模块还用于初始化第一索引;
本实施例中,第一更新子模块具体用于根据第一接收模块12接收到的PIN码的长度以及检查模块14读取到的类型标志更新第一数组中与第一索引的当前值对应的字节数据;
优选地,第一更新子模块用于:根据检查模块14读取到的类型标志设置第一数组中与第一索引的当前值对应的字节数据的前半个字节,根据第一接收模块12接收到的PIN码的长度设置第一数组中与第一索引的当前值对应的字节数据的后半个字节;
本实施例中,第二更新子模块具体包括:
第一更新单元,用于当第一索引的值小于第一接收模块12得到的第一PIN码数组的长度的二分之一取整时,根据第一PIN码数组中与第一索引的当前值的二倍对应的字节数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,第一更新单元具体用于:将第一接收模块12得到的第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将第一PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
第二更新单元,用于当第一更新单元操作完成后更新第一索引的值为其当前值加上预设步长;
第一判断单元,用于当第二更新单元操作完成后判断第一索引的值是否小于第一PIN码数组的长度的二分之一取整;
第二判断单元,用于当第一索引的值不小于第一PIN码数组的长度的二分之一取整时,判断第一PIN码数组的长度是否能被2整除;
第三更新单元,用于当第二判断单元判定第一PIN码数组的长度不能被2整除时,根据第一PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
优选地,第三更新单元具体用于:将第一接收模块12得到的第一PIN码数组中与第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据,将第三数据与第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加1对应的字节数据;
本实施例中,第二初始子模块还用于初始化第二索引和第三索引;
本实施例中,第三更新子模块具体包括:
检查单元,用于检查读取模块13得到的第一主账号数组的长度;
第四更新单元,用于当检查单元判定第一主账号数组的长度小于第二预设长度时,计算第二预设长度与主账号数组的长度的差值的二分之一,更新第二索引的值为其当前值加上计算结果;
第三判断单元,用于当第四更新单元操作完成后,判断第一主账号数组的长度是否能被2整除;
第五更新单元,用于当第三判断单元判定第一主账号数组的长度不能被2整除时,根据第一主账号数组中与第三索引的值对应的字节数据进行计算,用计算结果更新第二数组中与第二索引当前值对应的字节数据,更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
优选地,第五更新单元,具体用于:当第三判断单元判定第一主账号数组的长度不能被2整除时,将第一主账号数组中与第三索引的值对应的字节数据减去第三预设字节数据得到第四数据,用第四数据更新第二数组中与第二索引当前值对应的字节数据,更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
第六更新单元,用于当检查单元判定第一主账号数组的长度大于第二预设长度时,更新第三索引的值为第一主账号数组的长度与第二预设长度的差值;
第七更新单元,用于当检查单元判定第一主账号数组的长度等于第二预设长度时、第六更新单元操作完成后、第三判断单元判定第一主账号数组的长度能被2整除时、第五更新单元操作完成后、以及第四判断单元判定结果为是时,根据第一主账号数组中与第三索引的当前值对应的字节数据以及与第三索引的当前值加1对应的字节数据进行计算,用计算结果更新第二数组中与第二索引的当前值对应的字节数据,更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
优选地,第七更新单元具体用于:当检查单元判定第一主账号数组的长度等于第二预设长度时、第六更新单元操作完成后、第三判断单元判定第一主账号数组的长度能被2整除时、第五更新单元操作完成后、以及第四判断单元判定结果为是时,将第一主账号数组中与第三索引的当前值对应的字节数据减去第三预设字节数据后左移4位得到第五数据,将第一主账号数组中与第三索引的当前值加1对应的字节数据减去第三预设字节数据后得到第六数据,将第五数据和第六数据进行或运算,用或运算结果更新第二数组中与第二索引的当前值对应的字节数据,更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长
第四判断单元,用于在第七更新单元操作完成后,判断第二索引的值是否小于预设值。
服务器2包括:
第二接收模块21,用于接收读卡终端1发送的主账号信息以及转换后的PIN码;
验证模块22,用于根据第二接收模块21接收到的主账号信息对第二接收模块21接收到的转换后的PIN码进行验证;
响应模块23,用于在验证模块22验证通过时允许读卡终端1的后续访问,以及在验证模块22验证未通过时拒绝读卡终端1的后续访问,并向读卡终端1返回验证未通过的提示信息。
进一步地,服务器2还包括第二存储模块24,用于存储PIN码和与读卡终端中的预设密钥相对应的密钥;
第二接收模块21,还用于根据接收到的主账号信息得到第二主账号数组;
验证模块22具体包括:
解密子模块221,用于根据第二存储模块24中存储的密钥,采用与读卡终端采用的预设算法相对应的算法,对第二接收模块21接收到的转换后的PIN码进行解密,得到明文数据;
读取子模块222,用于从第二存储模块24中读取与第二接收模块21接收到的主账号信息对应的PIN码,以及根据读取到的PIN码得到第二PIN码数组;
第一判断子模块223,用于从解密子模块221得到的明文数据中获取用户输入的PIN码的长度,判断用户输入的PIN码的长度是否等于读取子模块222读取到的PIN码的长度;
第二判断子模块224,用于当第一判断子模块223的判断结果为是时,从解密子模块221得到的明文数据中获取类型标志的值,根据获取到的类型标志的值判断类型标志的类型;
第一处理子模块225,用于对读取子模块222得到的第二PIN码数组进行第一预设处理;
第二处理子模块226,用于对第二接收模块21得到的第二主账号数组进行第二预设处理;
运算子模块227,用于对第一处理子模块225的处理结果和第二处理子模块226的处理结果进行预设运算;
验证子模块228,用于当第二判断子模块224判定类型标志为第一标志或第二标志时,判断运算子模块227的运算结果中与PIN码相关部分的数据是否与解密子模块221得到的明文数据中与PIN码相关部分的数据一致,以及当第二判断子模块224判定类型标志为第三标志时,判断第一处理子模块225的处理结果中与PIN码相关部分的数据是否与解密子模块221得到的明文数据中与PIN码相关部分的数据一致;
响应模块23,具体用于当验证子模块228的判定结果为一致时允许读卡终端1的后续访问,当验证子模块228的判定结果为不一致或第一判断子模块223判断结果为否时拒绝读卡终端1的后续访问,并向读卡终端1返回验证未通过的提示信息。
本实施例中,提供一种PIN码保护系统,系统中的读卡终端引入了主账号和/或伪随机数对PIN码进行加密处理,增加了PIN码的破解难度,读卡终端将上述加密处理后的PIN码传输给服务器进行验证,服务器采用对应的方法进行PIN码验证,当验证通过时允许读卡终端的后续访问,验证不通过时拒绝读卡终端的后续访问,能够有效保护PIN码在传输过程中的安全。
以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
Claims (34)
1.一种PIN码保护方法,其特征在于,包括:
步骤S1:金融终端接收到用户输入的PIN码后,根据用户输入的PIN码得到第一PIN码数组,读取与自身连接的卡片中的主账号信息,读取自身存储的类型标志,并检查读取到的类型标志,若为第一标志或第二标志则执行步骤S2,若为第三标志则执行步骤S3;
步骤S2:所述读卡终端根据类型标志以及用户输入的PIN码的长度对所述第一PIN码数组进行第一预设处理,得到第一处理结果,根据读取到的主账号信息得到第一主账号数组,对所述第一主账号数组进行第二预设处理,得到第二处理结果,根据所述第一处理结果与所述第二处理结果进行预设运算,得到待加密数据,执行步骤S4;
步骤S3:所述读卡终端根据类型标志对所述第一PIN码数组进行所述第一预设处理,得到待加密数据,执行步骤S4;
步骤S4:所述读卡终端根据预设密钥,采用预设算法,对待加密数据进行加密,得到转换后的PIN码,将读取到的主账号信息以及所述转换后的PIN码发送给服务器进行验证;
步骤S5:所述服务器接收到所述读卡终端发送的主账号信息以及转换后的PIN码后,根据接收到的主账号信息对接收到的转换后的PIN码进行验证,若验证通过,则允许所述读卡终端的后续访问,若验证未通过,则拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证未通过的提示信息。
2.根据权利要求1所述的方法,其特征在于,所述服务器根据接收到的主账号信息对接收到的转换后的PIN码进行验证具体包括:
步骤S5-1:所述服务器根据与所述读卡终端中的所述预设密钥相对应的密钥,采用与所述读卡终端采用的所述预设算法相对应的算法,对所述转换后的PIN码进行解密,得到明文数据,并读取自身存储的与接收到的主账号信息对应的PIN码,根据读取到的PIN码得到第二PIN码数组;
步骤S5-2:所述服务器从所述明文数据中获取用户输入的PIN码的长度,判断所述用户输入的PIN码的长度是否等于所述与主账号信息对应的PIN码的长度,是则执行步骤S5-3,否则验证未通过;
步骤S5-3:所述服务器从所述明文数据中获取类型标志的值,根据获取到的类型标志的值判断类型标志的类型,若为所述第一标志或所述第二标志则执行步骤S5-4,若为所述第三标志则执行步骤S5-5;
步骤S5-4:所述服务器根据类型标志对所述第二PIN码数组进行所述第一预设处理,得到第三处理结果,根据接收到的主账号信息得到第二主账号数组,对所述第二主账号数组进行所述第二预设处理,得到第四处理结果,根据所述第三处理结果与所述第四处理结果进行所述预设运算,得到验证数据,执行步骤S5-6;
步骤S5-5:所述服务器根据类型标志对所述第二PIN码数组进行所述第一预设处理,得到验证数据,执行步骤S5-6;
步骤S5-6:所述服务器根据所述与接收到的主账号信息相对应的PIN码的长度判断所述验证数据中与PIN码相关部分的数据和所述明文数据中与PIN码相关部分的数据是否一致,是则验证通过,否则验证未通过。
3.根据权利要求1所述的方法,其特征在于,所述读卡终端根据类型标志和用户输入的PIN码的长度对所述第一PIN码数组进行第一预设处理具体包括:
步骤A1:所述读卡终端根据类型标志初始化第一数组;
步骤A2:所述读卡终端根据类型标志以及所述用户输入的PIN码的长度更新所述第一数组中的第一个字节数据;
步骤A3:所述读卡终端根据所述第一PIN码数组中的数据更新所述第一数组中第一个字节数据之后的相应字节数据。
4.根据权利要求3所述的方法,其特征在于,所述步骤A1具体为:当类型标志为第一标志时,所述读卡终端初始化第一数组为包含预设个数的第一预设字节数据的数组;当类型标志为第二标志时,所述读卡终端初始化第一数组为包含预设个数的第二预设字节数据的数组;当类型标志为第三标志时,所述读卡终端初始化第一数组为包含预设长度的随机数的数组,所述预设长度具体为预设个数个字节。
5.根据权利要求3所述的方法,其特征在于,所述步骤A3包括:
步骤A3-1:判断所述第一PIN码数组的长度是否能够被2整除,是则执行步骤A3-2,否则执行步骤A3-3;
步骤A3-2:对所述第一PIN码数组中的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新所述第一数组中的相应字节数据,步骤A3结束;
步骤A3-3:对所述第一PIN码数组中最后一个字节数据之前的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新所述第一数组中的相应字节数据,对PIN码数组中最后一个字节数据进行第二预设转换,并用转换结果更新所述第一数组中的相应字节数据,步骤A3结束。
6.根据权利要求1所述方法,其特征在于,所述读卡终端对所述第一主账号数组进行第二预设处理具体包括:
步骤B1:所述读卡终端初始化第二数组;
步骤B2:所述读卡终端根据所述第一主账号数组中的数据更新所述第二数组中的相应字节数据。
7.根据权利要求6所述的方法,其特征在于,所述步骤B1具体为:所述读卡终端初始化第二数组为包含预设个数的第五预设字节数据的数组。
8.根据权利要求6所述的方法,其特征在于,所述步骤B2具体包括:
步骤B2-1:所述读卡终端判断所述第一主账号数组的长度是否小于第二预设长度,是则执行步骤B2-2,否则执行步骤B2-5;
步骤B2-2:所述读卡终端判断所述第一主账号数组的长度能否被2整除,是则执行步骤B2-3,否则执行步骤B2-4;
步骤B2-3:所述读卡终端对所述第一主账号数组中的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新所述第二数组中的相应字节数据,步骤B2结束;
步骤B2-4:所述读卡终端对主账号数组中的第一个字节数据进行第四预设转换,并用转换结果更新所述第二数组中的相应字节数据,对主账号数组中第一个字节数据之后的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果替换所述第二数组中的相应字节数据,步骤B2结束;
步骤B2-5:所述读卡终端对所述第一主账号数组中从低位端起,长度等于第二数组的长度的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新所述第二数组中的相应字节数据,步骤B2结束。
9.根据权利要求1所述的方法,其特征在于,所述预设运算具体为异或运算。
10.根据权利要求5所述的方法,其特征在于,所述步骤A1中还包括:所述读卡终端初始化第一索引,作为所述第一PIN码数组和所述第一数组的索引;
所述步骤A2具体包括:所述读卡终端根据类型标志以及所述用户输入的PIN码的长度更新所述第一数组中与所述第一索引的当前值对应的字节数据。
11.根据权利要求10所述的方法,其特征在于,所述步骤A2具体包括:所述读卡终端根据类型标志设置所述第一数组中与所述第一索引的当前值对应的字节数据的前半个字节,根据所述用户输入的PIN码的长度设置所述第一数组中与所述第一索引的当前值对应的字节数据的后半个字节。
12.根据权利要求10所述的方法,其特征在于,所述步骤A3具体包括:
步骤D1:所述读卡终端根据所述第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据以及与所述第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据;
步骤D2:所述读卡终端更新所述第一索引的值为其当前值加上预设步长;
步骤D3:所述读卡终端判断所述第一索引的值是否小于所述第一PIN码数组的长度的二分之一取整,是则返回步骤D1,否则执行步骤D4;
步骤D4:所述读卡终端判断所述第一PIN码数组的长度是否能被2整除,是则步骤A3结束,否则执行步骤D5;
步骤D5:所述读卡终端根据所述第一PIN码数组中与所述第一索引的值的二倍对应的字节数据,以及所述第一数组中与所述第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据,步骤A3结束。
13.根据权利要求12所述的方法,其特征在于,所述步骤D1具体包括:所述读卡终端将所述第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将所述第一PIN码数组中与所述第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数据,将所述第一数据与所述第二数据进行或运算,用或运算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据。
14.根据权利要求12所述的方法,其特征在于,所述步骤D5具体包括:所述读卡终端将所述第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将所述第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据,将所述第三数据与所述第四数据进行或运算,用或运算结果更新所述第一数组中与第一索引的当前值加1对应的字节数据。
15.根据权利要求8所述的方法,其特征在于,所述步骤B1中还包括:所述读卡终端初始化第二索引和第三索引,分别作为所述第二数组和所述第一主账号数组的索引;
所述步骤B2具体包括:
步骤E1:所述读卡终端检查所述第一主账号数组的长度,若所述第一主账号数组的长度小于所述第二预设长度,则计算所述第二预设长度与主账号数组的长度的差值的二分之一,更新所述第二索引的值为其当前值加上计算结果,执行步骤E2;若所述第一主账号数组的长度大于所述第二预设长度,则更新所述第三索引的值为所述第一主账号数组的长度与所述第二预设长度的差值,执行步骤E4;若所述第一主账号数组的长度等于所述第二预设长度,则执行步骤E4;
步骤E2:所述读卡终端判断所述第一主账号数组的长度是否能被2整除,是则执行步骤E4,否则根据所述第一主账号数组中与所述第三索引的值对应的字节数据进行计算,用计算结果更新所述第二数组中与所述第二索引当前值对应的字节数据,执行步骤E3;
步骤E3:所述读卡终端更新所述第二索引的值为其当前值加上预设步长,更新所述第三索引的值为其当前值加上所述预设步长,执行步骤E4;
步骤E4:所述读卡终端根据所述第一主账号数组中与所述第三索引的当前值对应的字节数据以及与所述第三索引的当前值加1对应的字节数据进行计算,用计算结果更新所述第二数组中与所述第二索引的当前值对应的字节数据;
步骤E5:所述读卡终端更新所述第二索引的值为其当前值加上所述预设步长,更新所述第三索引的值为其当前值加上预设步长,判断所述第二索引的值是否小于预设值,是则返回步骤E4,否则步骤B2结束。
16.根据权利要求15所述的方法,其特征在于,所述读卡终端根据所述第一主账号数组中与所述第三索引的值对应的字节数据进行计算,用计算结果更新所述第二数组中与所述第二索引当前值对应的字节数据,具体包括:
所述读卡终端将所述第一主账号数组中与所述第三索引的值对应的字节数据减去第三预设字节数据得到第四数据,用所述第四数据更新所述第二数组中与所述第二索引当前值对应的字节数据。
17.根据权利要求15所述的方法,其特征在于,所述步骤E4具体包括:所述读卡终端将所述第一主账号数组中与所述第三索引的当前值对应的字节数据减去第三预设字节数据后左移4位得到第五数据,将所述第一主账号数组中与第三索引的当前值加1对应的字节数据减去所述第三预设字节数据后得到第六数据,将所述第五数据和所述第六数据进行或运算,用或运算结果更新所述第二数组中与所述第二索引的当前值对应的字节数据。
18.一种PIN码保护系统,包括读卡终端、服务器和与所述读卡终端建立连接的卡片,其特征在于,
所述读卡终端包括:
第一存储模块,用于存储类型标志和预设密钥;
第一接收模块,用于接收用户输入的PIN码,以及根据用户输入的PIN码得到第一PIN码数组;
读取模块,用于读取所述卡片中的主账号信息,以及根据读取到的主账号信息得到第一主账号数组;
检查模块,用于读取所述第一存储模块中存储的类型标志,以及检查读取到的类型标志;
第一处理模块,用于根据所述检查模块读取到的类型标志和所述第一接收模块接收到的PIN码的长度对所述第一接收模块得到的第一PIN码数组进行第一预设处理;
第二处理模块,用于对所述读取模块得到的第一主账号数组进行第二预设处理;
运算模块,用于对所述第一处理模块的处理结果与所述第二处理模块的处理结果进行预设运算;
加密模块,用于当所述检查模块判定读取到的类型标志为第一标志或第二标志时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述运算模块的运算结果进行加密得到转换后的PIN码,以及用于当所述检查模块判定读取到的类型标志为第三标志时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述第一处理模块的处理结果进行加密得到转换后的PIN码;
发送模块,用于将所述加密模块得到的转换后的PIN码和所述读取模块读取到的主账号信息发送给所述服务器进行验证;
所述服务器包括:
第二接收模块,用于接收所述读卡终端发送的主账号信息以及转换后的PIN码;
验证模块,用于根据所述第二接收模块接收到的主账号信息对所述第二接收模块接收到的转换后的PIN码进行验证;
响应模块,用于在所述验证模块验证通过时允许所述读卡终端的后续访问,以及在所述验证模块验证未通过时拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证未通过的提示信息。
19.根据权利要求18所述的系统,其特征在于,所述服务器还包括第二存储模块;
所述第二存储模块,用于存储PIN码和与所述预设密钥相对应的密钥;
所述第二接收模块,还用于根据接收到的主账号信息得到第二主账号数组;
所述验证模块具体包括:
解密子模块,用于根据所述第二存储模块中存储的密钥,采用与所述预设算法相对应的算法,对所述第二接收模块接收到的转换后的PIN码进行解密,得到明文数据;
读取子模块,用于从所述第二存储模块中读取与所述第二接收模块接收到的主账号信息对应的PIN码,以及根据读取到的PIN码得到第二PIN码数组;
第一判断子模块,用于从所述解密子模块得到的明文数据中获取用户输入的PIN码的长度,判断所述用户输入的PIN码的长度是否等于所述读取子模块读取到的PIN码的长度;
第二判断子模块,用于当所述第一判断子模块的判断结果为是时,从所述解密子模块得到的明文数据中获取类型标志的值,根据获取到的类型标志的值判断类型标志的类型;
第一处理子模块,用于对所述读取子模块得到的第二PIN码数组进行所述第一预设处理;
第二处理子模块,用于对所述第二接收模块得到的第二主账号数组进行所述第二预设处理;
运算子模块,用于对所述第一处理子模块的处理结果和所述第二处理子模块的处理结果进行所述预设运算;
验证子模块,用于当所述第二判断子模块判定类型标志为第一标志或第二标志时,判断所述运算子模块的运算结果中与PIN码相关部分的数据是否与所述解密子模块得到的明文数据中与PIN码相关部分的数据一致,以及当所述第二判断子模块判定类型标志为第三标志时,判断所述第一处理子模块的处理结果中与PIN码相关部分的数据是否与所述解密子模块得到的明文数据中与PIN码相关部分的数据一致;
所述响应模块,具体用于当所述验证子模块的判定结果为一致时允许所述读卡终端的后续访问,当所述验证子模块的判定结果为不一致或所述第一判断子模块判断结果为否时拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证未通过的提示信息。
20.根据权利要求18所述的系统,其特征在于,
所述第一处理模块具体包括:
第一初始化子模块,用于根据所述检查模块读取到的类型标志初始化第一数组;
第一更新子模块,用于根据所述第一接收模块接收到的PIN码的长度以及所述检查模块读取到的类型标志更新所述第一数组中的第一个字节数据;
第二更新子模块,用于根据所述第一接收模块得到的所述第一PIN码数组中的数据更新所述第一数组中第一个字节数据之后的相应字节数据。
21.根据权利要求20所述的系统,其特征在于,所述第一初始化子模块具体用于:当所述检查模块判定读取到的类型标志为第一标志时,初始化第一数组为包含预设个数的第一预设字节数据的数组;当所述检查模块判定读取到的类型标志为第二标志时,初始化第一数组为包含预设个数的第二预设字节数据的数组;以及当所述检查模块判定读取到的类型标志为第三标志时,初始化第一数组为包含预设长度的随机数的数组,所述预设长度具体为预设个数个字节。
22.根据权利要求20所述的系统,其特征在于,所述第二更新子模块具体用于:判断所述读取模块得到的第一PIN码数组的长度是否能被2整除,以及当判定结果为是时对所述第一PIN码数组中的数据以每两个字节数据为一组分别进行第一预设转换,并用转换结果更新所述第一数组中的相应字节数据,当判定结果为否时对所述第一PIN码数组中最后一个字节数据之前的数据以每两个字节数据为一组分别进行所述第一预设转换,并用转换结果更新所述第一数组中的相应字节数据,对所述第一PIN码数组中最后一个字节数据进行第二预设转换,并用转换结果更新所述第一数组中的相应字节数据。
23.根据权利要求18所述的系统,其特征在于,所述第二处理模块具体包括:
第二初始化子模块,用于初始化第二数组;
第三更新子模块,用于根据所述读取模块得到的第一主账号数组中的数据更新所述第二数组中的相应字节数据。
24.根据权利要求23所述的系统,其特征在于,所述第二初始化子模块具体用于:初始化第二数组为包含预设个数的第五预设字节数据的数据。
25.根据权利要求23所述的系统,其特征在于,所述第三更新子模块具体用于:判断所述读取模块得到的第一主账号数组的长度是否小于第二预设长度,若不小于则对所述第一主账号数组中从低位端起,长度等于所述第二预设长度的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新所述第二数组中的相应字节数据;若小于则判断所述第一主账号数组的长度能否被2整除,若能整除则对所述第一主账号数组中的数据以每两个字节数据为一组分别进行所述第三预设转换,并用转换结果更新所述第二数组中的相应字节数据,若不能整除则对所述第一主账号数组中的第一个字节数据进行第四预设转换,并用转换结果更新所述第二数组中的相应字节数据,对所述第一主账号数组中第一个字节数据之后的数据以每两个字节数据为一组分别进行所述第三预设转换,并用转换结果替换所述第二数组中的相应字节数据。
26.根据权利要求18所述的系统,其特征在于,所述运算模块,具体用于对所述第一处理模块的处理结果与所述第二处理模块的处理结果进行异或运算。
27.根据权利要求22所述的系统,其特征在于,所述第一初始化子模块还用于初始化第一索引;
所述第一更新子模块具体用于根据所述第一接收模块接收到的PIN码的长度以及所述检查模块读取到的类型标志更新所述第一数组中与所述第一索引的当前值对应的字节数据。
28.根据权利要求27所述的系统,其特征在于,所述第一更新子模块具体用于:根据所述检查模块读取到的类型标志设置所述第一数组中与所述第一索引的当前值对应的字节数据的前半个字节,根据所述第一接收模块接收到的PIN码的长度设置所述第一数组中与所述第一索引的当前值对应的字节数据的后半个字节。
29.根据权利要求27所述的系统,其特征在于,所述第二更新子模块具体包括:
第一更新单元,用于当所述第一索引的值小于所述第一接收模块得到的第一PIN码数组的长度的二分之一取整时,根据所述第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据以及与所述第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据;
第二更新单元,用于当所述第一更新单元操作完成后更新所述第一索引的值为其当前值加上预设步长;
第一判断单元,用于当所述第二更新单元操作完成后判断所述第一索引的值是否小于所述第一PIN码数组的长度的二分之一取整;
第二判断单元,用于当所述第一索引的值不小于所述第一PIN码数组的长度的二分之一取整时,判断所述第一PIN码数组的长度是否能被2整除;
第三更新单元,用于当所述第二判断单元判定所述第一PIN码数组的长度不能被2整除时,根据所述第一PIN码数组中与所述第一索引的值的二倍对应的字节数据,以及所述第一数组中与所述第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据。
30.根据权利要求29所述的系统,其特征在于,所述第一更新单元具体用于:将所述第一接收模块得到的第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将所述第一PIN码数组中与所述第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数据,将所述第一数据与所述第二数据进行或运算,用或运算结果更新所述第一数组中与所述第一索引的当前值加1对应的字节数据。
31.根据权利要求29所述的系统,其特征在于,所述第三更新单元具体用于:将所述第一接收模块得到的第一PIN码数组中与所述第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将所述第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据,将所述第三数据与所述第四数据进行或运算,用或运算结果更新所述第一数组中与第一索引的当前值加1对应的字节数据。
32.根据权利要求25所述的系统,其特征在于,所述第二初始子模块还用于初始化第二索引和第三索引;
所述第三更新子模块具体包括:
检查单元,用于检查所述读取模块得到的第一主账号数组的长度;
第四更新单元,用于当所述检查单元判定所述第一主账号数组的长度小于所述第二预设长度时,计算所述第二预设长度与主账号数组的长度的差值的二分之一,更新所述第二索引的值为其当前值加上计算结果;
第三判断单元,用于当所述第四更新单元操作完成后,判断所述第一主账号数组的长度是否能被2整除;
第五更新单元,用于当所述第三判断单元判定所述第一主账号数组的长度不能被2整除时,根据所述第一主账号数组中与所述第三索引的值对应的字节数据进行计算,用计算结果更新所述第二数组中与所述第二索引当前值对应的字节数据,更新所述第二索引的值为其当前值加上预设步长,更新所述第三索引的值为其当前值加上所述预设步长;
第六更新单元,用于当所述检查单元判定所述第一主账号数组的长度大于所述第二预设长度时,更新所述第三索引的值为所述第一主账号数组的长度与所述第二预设长度的差值;
第七更新单元,用于当所述检查单元判定所述第一主账号数组的长度等于所述第二预设长度时、所述第六更新单元操作完成后、所述第三判断单元判定所述第一主账号数组的长度能被2整除时、所述第五更新单元操作完成后、以及第四判断单元判定结果为是时,根据所述第一主账号数组中与所述第三索引的当前值对应的字节数据以及与所述第三索引的当前值加1对应的字节数据进行计算,用计算结果更新所述第二数组中与所述第二索引的当前值对应的字节数据,更新所述第二索引的值为其当前值加上所述预设步长,更新所述第三索引的值为其当前值加上预设步长;
所述第四判断单元,用于在所述第七更新单元操作完成后,判断所述第二索引的值是否小于预设值。
33.根据权利要求32所述的方法,其特征在于,所述第五更新单元,具体用于:当所述第三判断单元判定所述第一主账号数组的长度不能被2整除时,将所述第一主账号数组中与所述第三索引的值对应的字节数据减去第三预设字节数据得到第四数据,用所述第四数据更新所述第二数组中与所述第二索引当前值对应的字节数据,更新所述第二索引的值为其当前值加上预设步长,更新所述第三索引的值为其当前值加上所述预设步长。
34.根据权利要求32所述的方法,其特征在于,所述第七更新单元具体用于:当所述检查单元判定所述第一主账号数组的长度等于所述第二预设长度时、所述第六更新单元操作完成后、所述第三判断单元判定所述第一主账号数组的长度能被2整除时、所述第五更新单元操作完成后、以及第四判断单元判定结果为是时,将所述第一主账号数组中与所述第三索引的当前值对应的字节数据减去第三预设字节数据后左移4位得到第五数据,将所述第一主账号数组中与第三索引的当前值加1对应的字节数据减去所述第三预设字节数据后得到第六数据,将所述第五数据和所述第六数据进行或运算,用或运算结果更新所述第二数组中与所述第二索引的当前值对应的字节数据,更新所述第二索引的值为其当前值加上所述预设步长,更新所述第三索引的值为其当前值加上预设步长。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410318395.XA CN104092683B (zh) | 2014-07-04 | 2014-07-04 | 一种pin码保护方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410318395.XA CN104092683B (zh) | 2014-07-04 | 2014-07-04 | 一种pin码保护方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104092683A true CN104092683A (zh) | 2014-10-08 |
CN104092683B CN104092683B (zh) | 2017-05-10 |
Family
ID=51640364
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410318395.XA Active CN104092683B (zh) | 2014-07-04 | 2014-07-04 | 一种pin码保护方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104092683B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915602A (zh) * | 2015-04-22 | 2015-09-16 | 飞天诚信科技股份有限公司 | 一种Android平台下的PIN码保护方法 |
CN108718317A (zh) * | 2018-06-12 | 2018-10-30 | 飞天诚信科技股份有限公司 | 一种个人识别码保护的方法及装置 |
CN113596811A (zh) * | 2021-06-30 | 2021-11-02 | 荣耀终端有限公司 | 一种数据传输方法及终端设备 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110768784B (zh) * | 2019-10-22 | 2023-07-18 | 广州酷旅旅行社有限公司 | 密码传输方法、装置、计算机设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1921395A (zh) * | 2006-09-19 | 2007-02-28 | 北京飞天诚信科技有限公司 | 提高网络软件安全性的方法和系统 |
CN101820346A (zh) * | 2010-05-04 | 2010-09-01 | 北京飞天诚信科技有限公司 | 一种安全数字签名方法 |
WO2012014231A1 (en) * | 2010-07-29 | 2012-02-02 | Nirmal Juthani | System and method for generating a strong multi factor personalized server key from a simple user password |
CN103532719A (zh) * | 2013-10-22 | 2014-01-22 | 天地融科技股份有限公司 | 动态口令生成方法和系统、交易请求的处理方法和系统 |
WO2014093390A1 (en) * | 2012-12-10 | 2014-06-19 | Visa International Service Association | Authenticating remote transactions using a mobile device |
-
2014
- 2014-07-04 CN CN201410318395.XA patent/CN104092683B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1921395A (zh) * | 2006-09-19 | 2007-02-28 | 北京飞天诚信科技有限公司 | 提高网络软件安全性的方法和系统 |
CN101820346A (zh) * | 2010-05-04 | 2010-09-01 | 北京飞天诚信科技有限公司 | 一种安全数字签名方法 |
WO2012014231A1 (en) * | 2010-07-29 | 2012-02-02 | Nirmal Juthani | System and method for generating a strong multi factor personalized server key from a simple user password |
WO2014093390A1 (en) * | 2012-12-10 | 2014-06-19 | Visa International Service Association | Authenticating remote transactions using a mobile device |
CN103532719A (zh) * | 2013-10-22 | 2014-01-22 | 天地融科技股份有限公司 | 动态口令生成方法和系统、交易请求的处理方法和系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915602A (zh) * | 2015-04-22 | 2015-09-16 | 飞天诚信科技股份有限公司 | 一种Android平台下的PIN码保护方法 |
WO2016169395A1 (zh) * | 2015-04-22 | 2016-10-27 | 飞天诚信科技股份有限公司 | Android平台下的PIN码保护方法 |
US10628607B2 (en) | 2015-04-22 | 2020-04-21 | Feitian Technologies Co., Ltd. | Method for protecting pin code on android platform |
CN108718317A (zh) * | 2018-06-12 | 2018-10-30 | 飞天诚信科技股份有限公司 | 一种个人识别码保护的方法及装置 |
CN113596811A (zh) * | 2021-06-30 | 2021-11-02 | 荣耀终端有限公司 | 一种数据传输方法及终端设备 |
CN113596811B (zh) * | 2021-06-30 | 2022-06-21 | 荣耀终端有限公司 | 一种数据传输方法及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN104092683B (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11669637B2 (en) | Decentralized token table generation | |
CN103546576B (zh) | 一种嵌入式设备远程自动升级方法和系统 | |
US9053300B2 (en) | Device and a method for generating software code | |
CN101256613B (zh) | 无需制造者和用户知道彼此的加密信息的安全处理器系统 | |
CN106126981B (zh) | 基于虚拟函数表替换的软件安全防护方法 | |
CN101311942B (zh) | 对软件进行加密、解密的方法及加密、解密的装置 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
CN102737202B (zh) | 利用迭代加密/解密密钥更新的指令加密/解密设备和方法 | |
US20160232360A1 (en) | Method for realizing secure communication | |
CN105897406B (zh) | 一种明密文等长的aes加解密的装置 | |
CN104092683A (zh) | 一种pin码保护方法及系统 | |
CN101236496A (zh) | 一种软件一致性检测方法和装置 | |
CN102082784A (zh) | 一种软件在线升级方法 | |
CN104486355A (zh) | 防止代码被恶意篡改的方法和装置 | |
CN101373440B (zh) | 一种固件升级数据处理方法和装置 | |
CN106056017B (zh) | 智能卡cos加密下载系统 | |
CN103034801A (zh) | 基于模式的安全微控制器 | |
CN105184196A (zh) | 电子系统信息安全保护系统及方法 | |
CN105279441A (zh) | 用于对数据进行加密和解密的方法和架构 | |
CN106020868B (zh) | 一种智能卡固件更新方法及系统 | |
CN108170461B (zh) | 差分升级包生成方法、差分升级方法及装置 | |
CN108055585A (zh) | 数据处理方法、机顶盒升级方法、终端和机顶盒 | |
CN108829396A (zh) | 脚本编译的方法、脚本执行的方法、相关装置及系统 | |
CN115795513A (zh) | 文件加密和文件解密方法、装置以及设备 | |
US20170169196A1 (en) | Device and method for executing protected ios software modules |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |