一种pin码保护方法及系统的制作方法

文档序号:7808263阅读:365来源:国知局
一种pin码保护方法及系统的制作方法
【专利摘要】本发明公开了一种PIN码保护方法及系统,属于信息安全领域。所述方法包括读卡终端接收到用户输入的PIN码后根据与自身存储的类型标志对应的转换方法对PIN码进行转换得到转换后的PIN码,将转换后的PIN码和从与自身连接的卡片中获取到的主账号信息发送给服务器进行验证;服务器接收到读卡终端发送的主账号信息和转换后的PIN码后,从转换后的PIN码中获取类型标志的值,判断类型标志的类型,根据与类型标志对应的验证方法对转换后的PIN码进行验证。本发明的有益效果在于:读卡终端引入了主账号和/或伪随机数对PIN码进行加密处理,增加了PIN码的破解难度,能够有效保护PIN码在传输过程中的安全。
【专利说明】-种PIN码保护方法及系统

【技术领域】
[0001] 本发明涉及信息安全领域,尤其涉及一种PIN码保护方法及系统。

【背景技术】
[0002] PIN码是用来验证用户身份合法性的重要的用户数据,现有技术中,用户使用读卡 终端时,读卡终端需要将获取到的用户数据发送到后台服务器进行验证,在上述发送过程 中,用户数据多以明文或简单加密的方式进行发送,因此用户数据中的重要数据如PIN码 等存在泄漏的风险。


【发明内容】

[0003] 本发明的目的是为了克服现有技术的缺陷,提供一种PIN码保护方法及系统。
[0004] -方面,本发明提供一种PIN码保护方法,所述方法包括:
[0005] 步骤S1 :读卡终端接收到用户输入的PIN码后根据用户输入的PIN码得到第一 PIN码数组,读取与自身建立连接的卡片中的主账号信息,读取自身存储的类型标志,并检 查读取到的类型标志,若为第一标志或第二标志则执行步骤S2,若为第三标志则执行步骤 S3 ;
[0006] 步骤S2 :所述读卡终端根据类型标志以及用户输入的PIN码的长度对所述第一 PIN码数组进行第一预设处理,得到第一处理结果,根据读取到的主账号信息得到第一主账 号数组,对所述第一主账号数组进行第二预设处理,得到第二处理结果,根据所述第一处理 结果与所述第二处理结果进行预设运算,得到待加密数据,执行步骤S4 ;
[0007] 步骤S3 :所述读卡终端根据类型标志对所述第一 PIN码数组进行所述第一预设处 理,得到待加密数据,执行步骤S4 ;
[0008] 步骤S4 :所述读卡终端根据预设密钥,采用预设算法,对待加密数据进行加密得 到转换后的PIN码,将读取到的主账号信息以及所述转换后的PIN码发送给服务器进行验 证;
[0009] 步骤S5 :所述服务器接收到所述读卡终端发送的主账号信息以及转换后的PIN码 后,根据接收到的主账号信息对接收到的转换后的PIN码进行验证,若验证通过,则允许所 述读卡终端的后续访问,若验证未通过,则拒绝所述读卡终端的后续访问,并向所述读卡终 端返回验证未通过的提示信息。
[0010] 另一方面,本发明提供一种PIN码保护系统,所述系统包括:读卡终端、服务器和 与所述读卡终端连接的卡片;
[0011] 所述读卡终端包括:
[0012] 第一存储模块,用于存储类型标志和预设密钥;
[0013] 第一接收模块,用于接收用户输入的PIN码,以及根据用户输入的PIN码得到第一 PIN码数组;
[0014] 读取模块,用于读取所述卡片中的主账号信息,以及根据读取到的主账号信息得 到第一主账号数组;
[0015] 检查模块,用于读取所述第一存储模块中存储的类型标志,以及检查读取到的类 型标志;
[0016] 第一处理模块,用于根据所述检查模块读取到的类型标志和所述第一接收模块接 收到的PIN码的长度对所述第一接收模块得到的第一 PIN码数组进行第一预设处理;
[0017] 第二处理模块,用于对所述读取模块得到的第一主账号数组进行第二预设处理;
[0018] 运算模块,用于对所述第一处理模块的处理结果与所述第二处理模块的处理结果 进行预设运算;
[0019] 加密模块,用于当所述检查模块判定读取到的类型标志为第一标志或第二标志 时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述运算模块的运算 结果进行加密得到转换后的PIN码,以及用于当所述检查模块判定读取到的类型标志为第 三标志时,根据所述第一存储模块中存储的所述预设密钥、采用预设算法,对所述第一处理 模块的处理结果进行加密得到转换后的PIN码;
[0020] 发送模块,用于将所述加密模块得到的转换后的PIN码和所述读取模块读取到的 主账号信息发送给所述服务器进行验证;
[0021] 所述服务器包括:
[0022] 第二接收模块,用于接收所述读卡终端发送的主账号信息以及转换后的PIN码;
[0023] 验证模块,用于根据所述第二接收模块接收到的主账号信息对所述第二接收模块 接收到的转换后的PIN码进行验证;
[0024] 响应模块,用于在所述验证模块验证通过时允许所述读卡终端的后续访问,以及 在所述验证模块验证未通过时拒绝所述读卡终端的后续访问,并向所述读卡终端返回验证 未通过的提示信息。
[0025] 本发明方法的有益效果在于,本发明中,读卡终端引入了主账号对PIN码进行加 密处理,增加了 PIN码的破解难度,读卡终端将上述加密处理后的PIN码传输给服务器进行 验证,能够有效保护PIN码在传输过程中的安全。

【专利附图】

【附图说明】
[0026] 为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0027] 图1为本发明实施例1中提供的一种读卡终端加密PIN码方法的流程图;
[0028] 图2和图3为本发明实施例2中提供的一种读卡终端加密PIN码方法的具体实现 的流程图;
[0029] 图4本发明实施例3中提供的一种服务器验证PIN码的方法流程图;
[0030] 图5和图6为本发明实施例4中提供的一种服务器验证PIN码方法的具体实现的 流程图;
[0031] 图7为本发明实施例5中提供的一种PIN码保护系统的方框图。

【具体实施方式】
[0032] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0033] 本发明中的读卡终端中设置有应用处理器和安全处理器,且安全处理器不设置直 接对外接口,实施例1提供的是本地更新方法,实施例2提供的是远程更新方法。
[0034] 实施例1
[0035] 本发明实施例提供一种PIN码保护方法中读卡终端加密PIN码的方法,如图1所 示,所述方法具体包括:
[0036] 步骤10 :读卡终端接收到用户输入的PIN码后,根据用户输入的PIN码得到第一 PIN码数组,读取与自身连接的卡片中的主账号信息;
[0037] 步骤20 :读卡终端读取自身存储的类型标志,并检查读取到的类型标志,若为第 一标志或第二标志则执行步骤30,若为第三标志则执行步骤40 ;
[0038] 步骤30:读卡终端根据类型标志以及用户输入的PIN码的长度对PIN码数组进行 第一预设处理,得到第一处理结果,根据读取到的主账号信息得到第一主账号数组,对第一 主账号数组进行第二预设处理,得到第二处理结果,根据第一处理结果和第二处理结果进 行预设运算得到待加密数据,执行步骤50 ;
[0039] 步骤40 :读卡终端对第一 PIN码数组进行第一预设处理,得到待加密数据,执行步 骤50 ;
[0040] 步骤50 :读卡终端根据预设密钥,采用预设算法,对待加密数据进行加密,得到转 换后的PIN码;
[0041] 本实施例中,预设算法可以为任意加密算法,如DES、3DES、RSA等,预设密钥可以 为预设数据,也可以为将预设数据经过相应变化得到的数据,在此不进行限定。
[0042] 步骤60 :读卡终端将读取到的主账号信息以及转换后的PIN码发送给服务器进行 验证。
[0043] 本实施例中,用第一数组存储第一 PIN码数组的处理结果,对第一 PIN码数组进行 第一预设处理具体包括:
[0044] 步骤A1 :根据类型标志初始化第一数组;
[0045] 具体地,当类型标志为第一标志时,初始化第一数组为包含预设个数的第一预设 字节数据的数组;当类型标志为第二标志时,初始化第一数组为包含预设个数的第二预设 字节数据的数组;
[0046] 优选地,预设个数为8个,第一预设字节数据为OxFF,即当类型标志为第一标志 时,初始化第一数组为OxFFFFFFFFFFFFFFFF,第二预设字节数据为OxAA或OxBB或OxCC 或OxDD或ΟχΕΕ或OxFF中的任意一个,例如,当类型为第二标志时,初始化第一数组为 OxAAAAAAAAAAAAAAAA ;
[0047] 步骤A2 :根据类型标志以及用户输入的PIN码的长度更新第一数组中的第一个字 节数据;
[0048] 步骤A3 :根据第一 PIN码数组中的数据更新第一数组中第一个字节数据之后的相 应字节数据;
[0049] 具体地,步骤A3包括:
[0050] 步骤A3-1 :判断第一 PIN码数组的长度是否能够被2整除,是则执行步骤A3-2,否 则执行步骤A3-3 ;
[0051] 步骤A3-2 :对第一 PIN码数组中的数据以每两个字节数据为一组分别进行第一预 设转换,并用转换结果更新第一数组中的相应字节数据,步骤A3结束;
[0052] 步骤A3-3 :对第一 PIN码数组中最后一个字节数据之前的数据以每两个字节数据 为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,对第一 PIN 码数组中最后一个字节数据进行第二预设转换,并用转换结果更新第一数组中的相应字节 数据,步骤A3结束。
[0053] 本实施例中,用第二数组存储第一主账号数组的处理结果,对第一主账号数组进 行第二预设处理具体包括:
[0054] 步骤B1 :初始化第二数组;
[0055] 具体地,初始化第二数组为包含预设个数的第五预设字节数据的数组;
[0056] 优选地,预设个数为8个,第五预设字节数据为0x00,即初始化第二数组为 0x0000000000000000 ;
[0057] 步骤B2 :根据第一主账号数组中的数据更新第二数组中的相应字节数据;
[0058] 具体地,步骤B2包括:
[0059] 步骤B2-1 :判断第一主账号数组的长度是否小于第二预设长度,是则执行步骤 B2-2,否则执行步骤B2-5 ;
[0060] 步骤B2-2 :判断第一主账号数组的长度能否被2整除,是则执行步骤B2-3,否则执 行步骤B2-4 ;
[0061] 步骤B2-3 :对第一主账号数组中的数据以每两个字节数据为一组分别进行第三 预设转换,并用转换结果更新第二数组中的相应字节数据,步骤B2结束;
[0062] 步骤B2-4:对第一主账号数组中的第一个字节数据进行第四预设转换,并用转换 结果更新第二数组中的相应字节数据,对第一主账号数组中第一个字节数据之后的数据以 每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节 数据,步骤B2结束;
[0063] 步骤B2-5 :对第一主账号数组中从低位端起,长度等于第二数组的长度的数据以 每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数组中的相应字节 数据,步骤B2结束。
[0064] 本实施例中,优选地,根据第一处理结果和第二处理结果进行异或运算得到待加 密数据。
[0065] 本实施例中,读卡终端根据自身存储的类型标志,选择相应的方法对PIN码进行 加密后传输,能够灵活有效地保护PIN码在传输过程中的安全。
[0066] 实施例2
[0067] 本发明实施例提供一种PIN码保护方法中读卡终端加密PIN码的方法的具体实 现,如图2和图3所示,具体包括:
[0068] 步骤101 :接收到用户输入的PIN码后,根据用户输入的PIN码得到第一 PIN码数 组,读取与自身连接的卡片中的主账号信息;
[0069] 本实施例中,对PIN码进行ASCII码转换得到第一 PIN码数组;
[0070] 例如,若用户输入的PIN码为123456,则得到的第一 PIN码数组为 0x313233343536。
[0071] 步骤102 :检查自身存储的类型标志,若类型标志为第一标志则执行步骤103,若 类型标志为第二标志则执行步骤104,若类型标志为第三预设标志则执行步骤124 ;
[0072] 具体地,读卡终端判断类型标志的值,若类型标志的值为0则类型标志为第一标 志,若类型标志的值为3则类型标志为第二标志,若类型标志的值为1则类型标志为第三标 〇
[0073] 步骤103 :初始化第一数组为包含预设个数的第一预设字节数据的数组,执行步 骤 105 ;
[0074] 具体地,本实施例中,预设个数为8个,第一预设字节数据为OxFF,步骤103中初始 化第一数组为 OxFFFFFFFFFFFFFFFF。
[0075] 步骤104 :初始化第一数组为包含预设个数的第二预设字节数据的数组,执行步 骤 105 ;
[0076] 具体地,本实施例中,预设个数为8个,第二预设字节数据为OxAA或OxBB或OxCC 或OxDD或ΟχΕΕ或OxFF,步骤104中初始化第一数组为OxAAAAAAAAAAAAAAAA。
[0077] 步骤105 :初始化第一索引,作为第一 PIN码数组和第一数组的索引;
[0078] 本实施例中,第一索引的初始值为0。
[0079] 步骤106 :根据类型标志的值和用户输入的PIN码的长度设置第一数组中与第一 索引的当前值对应的字节数据;
[0080] 具体地,本实施例中,设置第一数组中与第一索引的当前值对应的字节数据的前 半字节等于类型标志的值,设置第一数组中与第一索引的当前值对应的字节数据的后半字 节等于PIN码数组的长度;
[0081] 例如,用户输入的PIN码的长度为6,当类型标志的值为0时,当前第一数 组为OxFFFFFFFFFFFFFFFF,设置第一数组中与第一索引的当前值对应的字节数据为 0x06,第一数组被修改为0x06FFFFFFFFFFFFFF ;当类型标志的值为3,当前第一数组为 OxAAAAAAAAAAAAAAAA时,设置第一数组中与第一索引的当前值对应的字节数据为0x36,第 一数组被修改为 0x36AAAAAAAAAAAAAA。
[0082] 步骤107 :根据第一 PIN码数组中与第一索引的当前值的二倍对应的字节数据以 及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中 与第一索引的当前值加1对应的字节数据;
[0083] 具体地,本实施例中,步骤107包括:将第一 PIN码数组中与第一索引的当前值的 二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将第一 PIN码数组 中与第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数 据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前 值加1对应的字节数据;
[0084] 优选地,本实施例中,第三字节数据为0x30,步骤107包括:将第一 PIN码数组中 与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第一数据,将第一 PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去0x30后得到第二数据, 将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加 1对应的字节数据;
[0085] 例如,第一 PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置 pbFormatPIN(i+l)的值为(pbPIN[2*i]-0x30)〈〈4|(pbPIN[2*i+l]-0x30),pbPIN 具体为 0x313233343536, i 的当前值为 0 则设置 pbFormatPIN(l) = (pbPIN[0]-0x30)〈〈4|(pbPIN [1]-0x30) = (0x31-0x30)〈〈4 I(0x32-0x30) = 0x01〈〈4I 0x02 = 0x10 I 0x02 = 0x12 ;
[0086] 若当前 pbFormatPIN 为 0x06FFFFFFFFFFFFFF,则 pbFormatPIN 被修改为 0x0612FFFFFFFFFFFF ;
[0087] 若当前 pbFormatPIN 为 0x36AAAAAAAAAAAAAA,则 pbFormatPIN 被修改为 0x3612AAAAAAAAAAAA。
[0088] 步骤108 :更新第一索引的值为其当前值加上预设步长;
[0089] 具体地,本实施例中,预设步长为1,步骤108具体为:更新第一索引的值为其当前 值加1 ;
[0090] 例如,第一索引的当前值为0,则更新第一索引的值为1。
[0091] 步骤109 :判断第一索引的值是否小于第一PIN码数组的长度的二分之一取整,是 则返回步骤107,否则执行步骤110 ;
[0092] 例如,若第一PIN码数组的长度为6个字节,则判断第一索引的值是否小于3,若第 一 PIN码数组的长度为5个字节,则判断第一索引的值是否小于2。
[0093] 步骤110 :判断第一 PIN码数组的长度是否能被2整除,是则执行步骤112,否则执 行步骤111 ;
[0094] 优选地,本实施例中,步骤110包括:判断第一 PIN码数组的长度对2取余得到的 余数是否为〇,是则第一 PIN码数组的长度能被2整除,执行步骤112,否则第一 PIN码数组 的长度不能被2整除,执行步骤111 ;
[0095] 例如,若第一 PIN码数组的长度为6个字节,第一 PIN码数组的长度对2取余得到 的余数为〇,则确定第一 PIN码数组的长度能被2整除;若第一 PIN码数组的长度为5个字 节,第一 PIN码数组的长度对2取余得到的余数为1,则确定第一 PIN码数组的长度不能被 2整除。
[0096] 步骤111 :根据第一 PIN码数组中与第一索引的值的二倍对应的字节数据,以及第 一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数 组中与第一索引的当前值加1对应的字节数据,执行步骤112 ;
[0097] 具体地,本实施例中,步骤111包括:将第一 PIN码数组中与第一索引的当前值的 二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将第一数组中与第 一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据, 将第三数据与第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加 1对应的字节数据;
[0098] 优选地,本实施例中,第四预设字节数据为0x0F,步骤111包括:将第一 PIN码数 组中与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第三数据,将第 一数组中与第一索引的值的当前值加1对应的字节数据与〇x〇F进行与运算得到第四数据, 将第三数据和第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加 1对应的字节数据;
[0099] 例如,第一 PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设置 pbFormatPIN(i+l)的值为(pbPIN[2*i]-0x30)〈〈4| (pbFormatPIN[l+i]&OxOF),pbPIN 具体 为0x3132333435, i的当前值为2 :
[0100] 若当前 pbFormatPIN 为 0X051234FFFFFFFFFF,则设置 pbFormatPIN(3) = (pbPIN[ 4]-0x30)?4| (pbFormatPIN(3)&0x0F) = (0x35-0x30) ?4 | (OxFF&OxOF) = 0x05?4 | OxOF =0x50 | OxOF = 0x5F,pbFormatPIN 被修改为 0x0512345FFFFFFFFF ;
[0101] 若当前 pbFormatPIN 为 0x351234AAAAAAAAAAAA,则设置 pbFormatPIN(3)= (pbPIN [4]-0x30) ?4 | (pbFormatPIN (3) &0x0F) = (0x35-0x30) ?4 | (OxAA&OxOF)= 0x05〈〈4|0x0A = 0x50|0x0A = 0x5A,pbFormatPIN 被修改为 0x3512345AAAAAAAAAAAAA。
[0102] 步骤112 :根据读取到的主账号信息得到第一主账号数组,并初始化第二数组;
[0103] 本实施例中,对主账号信息进行ASCII码转换得到第一主账号数组;
[0104] 例如,若主账号信息为621700137000807602,则得到的第一主账号数组为0x3632 31373030313337303030383037363032。
[0105] 具体地,本实施例中,初始化第二数组为包含预设个数的第五预设字节数据的数 组;
[0106] 优选地,本实施例中,预设个数为8个,第五预设字节数据为0x00,初始化第二数 组 0x0000000000000000。
[0107] 步骤113 :初始化第二索引和第三索引,将第二索引作为第二数组的索引,将第三 索引作为第一主账号数组的索引;
[0108] 本实施例中,第二索引的初始值为2,第三索引的初始值为0。
[0109] 步骤114 :检查第一主账号数组的长度,若小于第二预设长度则执行步骤115,若 大于第二预设长度则执行步骤119,若等于第二预设长度则执行步骤120 ;
[0110] 具体地,本实施例中,根据第二数组的长度确定第二预设长度,第二预设长度等于 第二数组的长度减去2个字节后与2的乘积;
[0111] 优选地,本实施例中,第二数组的长度为8个字节,第二预设长度为12个字节。
[0112] 步骤115 :计算第二预设长度与第一主账号数组的长度的差值的二分之一取整, 更新第二索引的值为其当前值加上计算结果;
[0113] 本实施例中,第二预设长度为12个字节,例如,第一主账号数组的长度为5个字 节,第二索引的当前值为2,则更新第二索引的值为5。
[0114] 步骤116:判断第一主账号数组的长度是否能被2整除,是则执行步骤120,否则执 行步骤117 ;
[0115] 优选地,本实施例中,步骤116包括:判断第一主账号数组的长度对2取余得到的 余数是否为〇,是则第一主账号数组的长度能被2整除,执行步骤120,否则第一主账号数组 的长度不能被2整除,执行步骤117 ;
[0116] 例如,若第一主账号数组的长度为18个字节,第一主账号数组的长度对2取余得 到的余数为〇,则确定第一主账号数组的长度能被2整除,执行步骤120 ;
[0117] 若第一主账号数组的长度为5个字节,第一主账号数组的长度对2取余得到的余 数为1,则确定第一主账号数组的长度不能被2整除,执行步骤117。
[0118] 步骤117 :根据第一主账号数组中与第三索引的值对应的字节数据进行计算,用 计算结果更新第二数组中与第二索引当前值对应的字节数据;
[0119] 具体地,本实施例中,步骤117包括:将第一主账号数组中与第三索引的值对应的 字节数据减去第三预设字节数据得到第四数据,用第四数据更新第二数组中与第二索引当 前值对应的字节数据;
[0120] 优选地,本实施例中,第三预设字节数据为0x30,步骤117包括:将第一主账号数 组中与第三索引的值对应的字节数据减去0x30得到第四数据,用第四数据更新第二数组 中与第二索引当前值对应的字节数据;
[0121] 例如,第一主账号数组为pbPAN,第二数组为pbFormatPAN,第二索引为blndex, 第三索引为 bPANIndex,则设置 pbFormatPAN[bIndex]的值为 pbPAN[bPANIndex]-0x30, 若pbPAN具体为0x3534333231,blndex的当前值为5, bPANIndex的当前值为0,当前 pbFormatPAN 为 0x0000000000000000,则设置 pbFormatPAN[5] = pbPAN[0]-0x30 = 0x35-0x30 = 0x05, pbFormatPAN 被修改为 0x0000000000050000。
[0122] 步骤118 :更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其 当前值加上预设步长,执行步骤120 ;
[0123] 具体地,本实施例中,预设步长为1,步骤118中,更新第二索引的值为其当前值加 1,更新第三索引的值为其当前值加1 ;
[0124] 例如,第二索引的当前值为5,第三索引的当前值为0,则更新第二索引的值为6, 更新第三索引的值为1。
[0125] 步骤119 :更新第三索引的值为第一主账号数组的长度与第二预设长度的差值;
[0126] 本实施例中,第二预设长度为12个字节,例如,第一主账号数组的长度为18个字 节,第三索引的当前值为〇,则更新第三索引的值为6。
[0127] 步骤120 :根据第一主账号数组中与第三索引的当前值对应的字节数据以及与第 三索引的当前值加1对应的字节数据进行计算,用计算结果更新第二数组中与第二索引的 当前值对应的字节数据;
[0128] 具体地,本实施例中,步骤120包括:将第一主账号数组中与第三索引的当前值对 应的字节数据减去第三预设字节数据后左移4位得到第五数据,将第一主账号数组中与第 三索引的当前值加1对应的字节数据减去第三预设字节数据后得到第六数据,将第五数据 和第六数据进行或运算,用或运算结果更新第二数组中与第二索引的当前值对应的字节数 据;
[0129] 优选地,本实施例中,第三预设字节数据为0x30,步骤120包括:将第一主账号数 组中与第三索引的当前值对应的字节数据减去0x30后左移4位得到第五数据,将第一主账 号数组中与第三索引的当前值加1对应的字节数据减去0x30后得到第六数据,将第五数据 和第六数据进行或运算,用或运算结果更新第二数组中与第二索引的当前值对应的字节数 据;
[0130] 例如,第一主账号数组为pbPAN,第二数组为pbFormatPAN,第二索引为blndex,第 三索引为 bPANIndex,则设置 pbFormatPAN [blndex]的值为(pbPAN [bPANIndex] -0x30)〈〈4 (pbPAN[bPANIndex+1]-0x30):
[0131] 若 pbPAN 具体为 0x3534333231,blndex 的当前值为 6, bPANIndex 的当前值为 1, 当前 pbFormatPAN 为 0x0000000000005000,则设置 pbFormatPAN[6] = (pbPAN[l]-0x30)〈 <4 I (pbPAN [2]-0x30) = (0x34-0x30) ?4 | (0x33-0x30) = 0x04?4 | 0x03) = 0x40 | 0x03 = 0x43, pbFormatPAN 被修改为 0x0000000000054300 ;
[0132] 若 pbPAN 具体为 0x363231373030313337303030383037363032, blndex 的 当前值为 2, bPANIndex 的当前值为 6,当前 pbFormatPAN 为 0x0000000000000000, 贝丨J 设置 pbFormatPAN[2] = (pbPAN [6] -0x30) < <4 | (pbPAN [7] -0x30)= (0x31-0x30)〈〈4 I (0x33-0x30) = 0x01〈〈4 I 0x03) = 0x10 I 0x03 = 0x13, pbFormatPAN 被修 改为 0x0000130000000000。
[0133] 步骤121 :更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其 当前值加上预设步长;
[0134] 具体地,本实施例中,预设步长为1,步骤121具体为:更新第二索引的值为其当前 值加1,更新第三索引的值为其当前值加1 ;
[0135] 例如,第二索引的当前值为2,第三索引的当前值为6,则更新第二索引的值为3, 更新第三索引的值为7。
[0136] 步骤122 :判断第二索引的值是否小于预设值,是则返回步骤120,否则执行步骤 123 ;
[0137] 本实施例中,预设值为8。
[0138] 步骤123 :根据第一数组中的数据和第二数组中的数据计算得到待加密数据,执 行步骤133 ;
[0139] 具体地,本实施例中,步骤123包括:将第一数组中的数据和第二数组中的数据进 行异或运算,得到待加密数据;
[0140] 例如,当前第二数组为 0x0000137000807602 :
[0141] 若当前第一数组为 0x06123456FFFFFFFF,则将 0x06123456FFFFFFFF 和 0x0000137000807602进行异或运算,得到待加密数据0x06122726FF7F89FD ;
[0142] 若当前第一数组为 0x36123456AAAAAAAA,则将 0x36123456AAAAAAAA 和 0x0000137000807602进行异或运算,得到待加密数据0x36122726AA2ADCA8。
[0143] 步骤124 :初始化第一数组为包含第一预设长度的随机数的数组;
[0144] 具体地,本实施例中,第一预设长度为8个字节,步骤124中初始化第一数组为包 含长度为8个字节的随机数的数组;
[0145] 例如,初始化第一数组为0XOT1310C8118E56E8。
[0146] 步骤125 :初始化第一索引,作为第一 PIN码数组和第一数组的索引;
[0147] 本实施例中,第一索引的初始值为0。
[0148] 步骤126 :根据类型标志的值和第一 PIN码数组的长度设置第一数组中与第一索 引的当前值对应的字节数据;
[0149] 具体地,本实施例中,设置第一数组中与第一索引的当前值对应的字节数据的前 半字节等于类型标志的值,设置第一数组中与第一索引的当前值对应的字节数据的后半字 节等于第一 PIN码数组的长度;
[0150] 例如,第一 PIN码数组的长度为6个字节,当类型标志的值为1,当前第一数组为 0xroi310C8118E56E8时,设置第一数组中与第一索引的当前值对应的字节数据为0x16,第 一数组被修改为 0xl61310C8118E56E8。
[0151] 步骤127 :根据第一 PIN码数组中与第一索引的当前值的二倍对应的字节数据以 及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中 与第一索引的当前值加1对应的字节数据;
[0152] 具体地,本实施例中,步骤127包括:将第一 PIN码数组中与第一索引的当前值的 二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数据,将第一 PIN码数组 中与第一索引的当前值的二倍加1对应的字节数据减去第三预设字节数据后得到第二数 据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前 值加1对应的字节数据;
[0153] 优选地,本实施例中,第三字节数据为0x30,步骤127包括:将第一 PIN码数组中 与第一索引的当前值的二倍对应的字节数据减去0x30后左移4位得到第一数据,将第一 PIN码数组中与第一索引的当前值的二倍加1对应的字节数据减去0x30后得到第二数据, 将第一数据与第二数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加 1对应的字节数据;
[0154] 例如,第一 PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引 为 i,则设置pbFormatPIN(i+l)的值为(pbPIN[2*i]-0x30)〈〈4|(pbPIN[2*i+l ]-0x30),pbPIN 具体为 0x313233343536, i 的当前值为 0,当前 pbFormatPIN 为 0xl61310C8118E56E8,则设置 pbFormatPIN(l) = (pbPIN[0]-0x30)〈〈4| (pbPIN[l]-0x30) =(0x31-0x30)〈〈4 I(0x32-0x30) = 0x01〈〈4I 0x02 = 0x10 I 0x02 = 0x12, pbFormatPIN被 修改为 0xl61210C8118E56E8。
[0155] 步骤128 :更新第一索引的值为其当前值加上预设步长;
[0156] 步骤129 :判断第一索引的值是否小于第一 PIN码数组的长度的二分之一取整,是 则返回步骤127,否则执行步骤130 ;
[0157] 步骤130 :判断第一 PIN码数组的长度是否能被2整除,是则执行步骤132,否则执 行步骤131 ;
[0158] 本实施例中,步骤128至步骤130的具体实现方法与步骤108至步骤110的具体 实现方式相同,在此不再赘述。
[0159] 步骤131 :根据第一 PIN码数组中与第一索引的值的二倍对应的字节数据,以及第 一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数 组中与第一索引的当前值加1对应的字节数据,执行步骤132 ;
[0160] 具体地,本实施例中,步骤131包括:将第一 PIN码数组中与第一索引的当前值的 二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数据,将第一数组中与第 一索引的值的当前值加1对应的字节数据与第四预设字节数据进行与运算得到第四数据, 将第三数据与第四数据进行或运算,用或运算结果更新第一数组中与第一索引的当前值加 1对应的字节数据;
[0161] 优选地,本实施例中,第三预设字节数据为0x30,第四预设字节数据为OxOF,步骤 131包括:将第一 PIN码数组中与第一索引的当前值的二倍对应的字节数据减去0x30后左 移4位得到第三数据,将第一数组中与第一索引的值的当前值加1对应的字节数据与0x0F 进行与运算得到第四数据,将第三数据和第四数据进行或运算,用或运算结果更新第一数 组中与第一索引的当前值加1对应的字节数据;
[0162] 例如,第一 PIN码数组为pbPIN,第一数组为pbFormatPIN,第一索引为i,则设 置 pbFormatPIN(i+l)的值为(pbPIN[2*i]-0x30)〈〈4|(pbFormatPIN[l+i]&0x0F),当 pbPIN 具体为 0x3132333435, i 的当前值为 2,当前 pbFormatPIN 为 0xl51234C8118E56E8, 则设置 pbFormatPIN(3) = (pbPIN[4]-0x30)〈〈4|(pbFormatPIN(3)&0x0F)= (0x35-0x30)〈〈4 I (0xC8&0x0F) = 0x05〈〈4 I 0x08 = 0x50 I 0x08 = 0x58, pbFormatPIN 被修 改为 0xl5123458118E56E8。
[0163] 步骤132 :将第一数组中的数据作为待加密数据,执行步骤133 ;
[0164] 步骤133 :根据预设密钥,采用预设算法,对待加密数据进行加密,得到转换后的 PIN 码;
[0165] 本实施例中,预设算法可以为任意加密算法,如DES、3DES、RSA等,预设密钥可以 为预设数据,也可以为将预设数据经过相应变化得到的数据,在此不进行限定。
[0166] 优选地,本实施例中,预设算法为3DES算法,预设密钥为预设数据;例如预设密钥 为 0xDEF39DCB7A09E93EBFD13BB49B4C4165 :
[0167] 若待加密数据为0x06122726FF7F89FD,则根据预设密钥,采用3DES算法,对 0x06122726FF7F89FD 进行加密,得到转换后的 PIN 码为 0x06077A61308A4EF8 ;
[0168] 若待加密数据为0x36122726AA2ADCA8,则根据预设密钥,采用3DES算法,对 0x36122726AA2ADCA8 进行加密,得到转换后的 PIN 码为 0xC4911275AFEE840D ;
[0169] 若待加密数据为0xl6123456118E56E8,则根据预设密钥,采用3DES算法,对 0xl6123456118E56E8 进行加密,得到转换后的 PIN 码为 0xEBE15EE314ADA31A。
[0170] 步骤134 :将主账号信息以及转换后的PIN码发送到服务器进行验证。
[0171] 本实施例提供的方法中,读卡终端引入了主账号和/或伪随机数对PIN码进行加 密处理,增加了 PIN码的破解难度,读卡终端将上述加密处理后的PIN码传输给服务器进行 验证,能够有效保护PIN码在传输过程中的安全,当引入伪随机数时还能同时起到防止重 放攻击的作用。
[0172] 实施例3
[0173] 本发明实施例提供一种PIN码保护方法中服务器验证PIN码的方法,如图4所示, 所述方法具体包括:
[0174] 步骤70 :服务器接收到读卡终端发送的主账号信息以及转换后的PIN码后,对转 换后的PIN码进行解密,得到明文数据,读取自身存储的与接收到的主账号信息对应的PIN 码,根据读取到的PIN码得到第二PIN码数组;
[0175] 本实施例中,服务器采用与读卡终端相对应的密钥和算法对接收到的转换后的 PIN码解密,在此不再赘述。
[0176] 步骤80 :服务器从明文数据中获取用户输入的PIN码的长度,判断获取到的用户 输入的PIN码的长度是否等于读取到的与接收到的主账号信息对应的PIN码的长度,是则 执行步骤90,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的 提示信息;
[0177] 本实施例中,服务器从明文数据的第一个字节数据中获取用户输入的PIN码的长 度。
[0178] 步骤90 :服务器从明文数据中获取类型标志的值,根据类型标志的值判断类型标 志的类型,若为第一标志或第二标志则执行步骤A0,若为第三标志则执行步骤B0 ;
[0179] 本实施例中,服务器从明文数据的第一个字节数据中获取预设标志。
[0180] 步骤A0 :服务器对第二PIN码数组进行第一预设处理,得到第三处理结果,根据接 收到的主账号信息得到第二主账号数组,对第二主账号数组进行第二预设处理,得到第四 处理结果,根据第三处理结果和第四处理结果进行预设运算,得到验证数据,执行步骤C0 ;
[0181] 本实施例中,服务器对第二PIN码数组进行第一预设处理的方法与实施例一中读 卡终端对第一 PIN码数组进行第一预设处理的方法相同,服务器对第二主账号数组进行第 二预设处理的方法与实施例一中读卡终端对第一主账号数组进行第二预设处理的方法相 同,在此不再赘述;
[0182] 优选地,本实施例中,服务器根据第三处理结果和第四处理结果进行异或运算得 到验证数据。
[0183] 步骤B0 :服务器对第二PIN码数组进行第一预设处理,得到验证数据,执行步骤 C0 ;
[0184] 本实施例中,服务器对第二PIN码数组进行第一预设处理的方法与实施例一中读 卡终端对第一 PIN码数组进行第一预设处理的方法相同,在此不再赘述。
[0185] 步骤C0 :服务器根据与接收到的主账号信息相对应的PIN码的长度判断验证数据 中与PIN码相关部分的数据和明文数据中与PIN码相关部分的数据是否一致,是则验证通 过,允许读卡终端的后续访问,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终端 返回验证未通过的提示信息。
[0186] 本实施例提供一种对根据实施例1提供的方法得到的转换后的PIN码进行验证的 方法,结合实施例1中的度卡终端加密PIN码的方法,形成安全有效的PIN码保护方法。
[0187] 实施例4
[0188] 本发明实施例提供一种PIN码保护方法中服务器验证PIN码的方法,如图5和图 6所示,所述方法具体包括:
[0189] 步骤201 :服务器接收到读卡终端发送的主账号信息以及转换后的PIN码后,对接 收到的转换后的PIN码解密,读取自身存储的与接收到的主账号信息对应的PIN码,根据读 取到的PIN码得到第二PIN码数组;
[0190] 本实施例中,服务器采用与读卡终端相对应的密钥和算法对接收到的转换后的 PIN码解密;
[0191] 例如,与读卡终端相对应的密钥为0xDEF39DCB7A09E93EBFD13BB49B4C4165,与读 卡终端相对应的算法为3DES :
[0192] 若转换后的PIN码为0x06077A61308A4EF8,则解密后得到的明文数据为 0x06122726FF7F89FD ;
[0193] 若转换后的PIN码为0xC4911275AFEE840D,则解密后得到的明文数据为 0x36122726AA2ADCA8 ;
[0194] 若转换后的PIN码为Ox EBE15EE314ADA31A,则解密后得到的明文数据为 0xl6123456118E56E8。
[0195] 步骤202 :读取解密得到的明文数据中的第一个字节数据,根据读取到的字节数 据得到类型标志的值和用户输入的PIN码的长度;
[0196] 具体地,本实施例中,根据明文数据中的第一个字节数据的前半个字节得到类型 标志的值,根据明文数据中的第一个字节数据的后半个字节得到用户输入的PIN码的长 度;
[0197] 例如,读取到的字节数据为0x06,则得到类型标志的值为0,用户输入的PIN码的 长度为6。
[0198] 步骤203 :判断用户输入的PIN码的长度是否等于与接收到的主账号信息对应的 PIN码的长度,是则执行步骤204,否则验证未通过,拒绝读卡终端的后续访问,并向读卡终 端返回验证未通过的提示信息;
[0199] 步骤204 :根据得到的类型标志的值判断类型标志的类型,若为第一标志则执行 步骤205,若为第二标志则执行步骤206,若为第三标志则执行步骤225 ;
[0200] 具体地,本实施例中,检查得到的类型标志的值,若为0则类型标志为第一标志, 若为3则类型标志为第二标志,若为1则类型标志为第三标志。
[0201] 步骤205 :初始化第一数组为包含预设个数的第一预设字节数据的数组,执行步 骤 207 ;
[0202] 本实施例中,预设个数为8个,第一预设字节数据为OxFF,步骤205中初始化第一 数组为 OxFFFFFFFFFFFFFFFF。
[0203] 步骤206 :初始化第一数组为包含预设个数的第二预设字节数据的数组,执行步 骤 207 ;
[0204] 本实施例中,第二预设字节数据为OxAA或OxBB或OxCC或OxDD或ΟχΕΕ或OxFF ;
[0205] 例如,初始化第一数组为OxAAAAAAAAAAAAAAAA。
[0206] 步骤207 :初始化第一索引,作为第二PIN码数组和第一数组的索引;
[0207] 本实施例中,第一索引的初始值为0。
[0208] 步骤208 :根据第二PIN码数组中与第一索引的当前值的二倍对应的字节数据以 及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中 与第一索引的当前值加1对应的字节数据;
[0209] 步骤209 :更新第一索引的值为其当前值加上预设步长;
[0210] 步骤210 :判断第一索引的值是否小于第二PIN码数组的长度的二分之一取整,是 则返回步骤208,否则执行步骤209 ;
[0211] 步骤211 :判断第二PIN码数组的长度是否能被2整除,是则执行步骤213,否则执 行步骤212 ;
[0212] 步骤212 :根据第二PIN码数组中与第一索引的值的二倍对应的字节数据,以及第 一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数 组中与第一索引的当前值加1对应的字节数据,执行步骤213 ;
[0213] 本实施例中,步骤208至步骤212的具体实现方法与实施例二中步骤107至步骤 111的具体实现方法相同,在此不再赘述。
[0214] 步骤213 :根据接收到的主账号信息得到第二主账号数组,并初始化包含预设个 数的第五字节数据的第二数组;
[0215] 本实施例中,对主账号信息进行ASCII码转换得到第二主账号数组;
[0216] 例如,接收到的主账号信息为621700137000807602,则得到的第二主账号数组为 0x363231373030313337303030383037363032 ;
[0217] 本实施例中,优选地,预设个数为8,第五预设字节数据为0x00。
[0218] 步骤214 :初始化第二索引和第三索引,将第二索引作为第二数组的索引,将第三 索引作为第二主账号数组的索引;
[0219] 本实施例中,第二索引的初始值为2,第三索引的初始值为0。
[0220] 步骤215 :检查第二主账号数组的长度,若小于第二预设长度则执行步骤216,若 大于第二预设长度则执行步骤220,若等于第二预设长度则执行步骤221 ;
[0221] 本实施例中,第二预设长度为12个字节。
[0222] 步骤216 :计算第二预设长度与第二主账号数组的长度的差值的二分之一,更新 第二索引的值为其当前值加上计算结果;
[0223] 步骤217 :判断第二主账号数组的长度是否能被2整除,是则执行步骤221,否则执 行步骤218 ;
[0224] 步骤218 :根据第二主账号数组中与第三索引的值对应的字节数据进行计算,用 计算结果更新第二数组中与第二索引当前值对应的字节数据;
[0225] 步骤219 :更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其 当前值加上预设步长,执行步骤221 ;
[0226] 步骤220 :更新第三索引的值为第二主账号数组的长度与第二预设长度的差值;
[0227] 步骤221 :根据第二主账号数组中与第三索引的当前值对应的字节数据以及与第 三索引的当前值加1对应的字节数据进行计算,用计算结果更新第二数组中与第二索引的 当前值对应的字节数据;
[0228] 步骤222 :更新第二索引的值为其当前值加上预设步长,更新第三索引的值为其 当前值加上预设步长;
[0229] 步骤223:判断第二索引的值是否小于预设值,是则返回步骤221,否则执行步骤 224 ;
[0230] 本实施例中,步骤214至步骤223的具体实现方法与实施例二中步骤113至步骤 122的具体实现方法相同,在此不再赘述。
[0231] 步骤224 :根据第一数组中的数据和第二数组中的数据进行计算,得到验证数据, 执行步骤233 ;
[0232] 具体地,本实施例中,将第一数组中的数据和第二数组中的数据进行异或运算,得 到验证数据;
[0233] 例如,第一数组具体为0xFF123456FFFFFFFF,第二数组具体为 0x0000137000807602,则将 0xFF123456FFFFFFFF 和 0x0000137000807602 进行异或运算,得 到验证数据 0xFF122726FF7F89FD。
[0234] 步骤225 :初始化第一数组为包含第一预设长度的随机数的数组;
[0235] 具体地,步骤225中,初始化第一数组为包含长度为8个字节的随机数的数组。
[0236] 步骤226 :初始化第一索引,作为第二PIN码数组和第一数组的索引;
[0237] 步骤227 :根据第二PIN码数组中与第一索引的当前值的二倍对应的字节数据以 及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一数组中 与第一索引的当前值加1对应的字节数据;
[0238] 步骤228 :更新第一索引的值为其当前值加上预设步长;
[0239] 步骤229 :判断第一索引的值是否小于第二PIN码数组的长度的二分之一取整,是 则返回步骤227,否则执行步骤230 ;
[0240] 步骤230 :判断第二PIN码数组的长度是否能被2整除,是则执行步骤232,否则执 行步骤231 ;
[0241] 步骤231 :根据第二PIN码数组中与第一索引的值的二倍对应的字节数据,以及第 一数组中与第一索引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数 组中与第一索引的当前值加1对应的字节数据,执行步骤232 ;
[0242] 本实施例中,步骤226至步骤231的具体实现方法与步骤207至步骤212的具体 实现方法相同,在此不再赘述。
[0243] 步骤232 :将第一数组中的数据作为验证数据,执行步骤233 ;
[0244] 步骤233 :根据与接收到的主账号信息相对应的PIN码的长度判断验证数据与明 文数据中的相应数据是否一致,是则验证通过,允许读卡终端的后续访问,否则验证未通 过,拒绝读卡终端的后续访问,并向读卡终端返回验证未通过的提示信息。
[0245] 例如,PIN码的长度为6,则判断验证数据中的第二字节至第四字节与明文数据中 的第二字节至第四字节是否一致,若验证数据具体为FF122726FF7F89FD,明文数据具体为 36122726AA2ADCA8,经判断验证数据的第二字节至第四字节与明文数据的第二字节至第四 字节均为122726,验证通过。
[0246] 本实施例提供一种对根据实施例2中提供的方法生成的转换后的PIN码进行验证 的方法,结合实施例2中提供的读卡终端加密PIN码的方法,形成安全有效的PIN码保护方 法。
[0247] 实施例5
[0248] 本实施例提供一种PIN码保护系统,所述系统包括读卡终端1、服务器2和与所述 读卡终端建立连接的卡片3,如图7所示:
[0249] 读卡终端1包括:
[0250] 第一存储模块11,用于存储类型标志和预设密钥;
[0251] 第一接收模块12,用于接收用户输入的PIN码,以及根据用户输入的PIN码得到第 一 PIN码数组;
[0252] 读取模块13,用于读取卡片3中的主账号信息,以及根据读取到的主账号信息得 到第一主账号数组;
[0253] 检查模块14,用于读取第一存储模块11中存储的类型标志,以及检查读取到的类 型标志;
[0254] 第一处理模块15,用于根据检查模块14读取到的类型标志和第一接收模块12接 收到的PIN码的长度对第一接收模块12得到的第一 PIN码数组进行第一预设处理;
[0255] 具体地,本实施例中,第一处理模块15具体包括:
[0256] 第一初始化子模块,用于根据检查模块14读取到的类型标志初始化第一数组;
[0257] 优选地,第一初始化子模块具体用于:当检查模块14判定读取到的类型标志为第 一标志时,初始化第一数组为包含预设个数的第一预设字节数据的数组;当检查模块14判 定读取到的类型标志为第二标志时,初始化第一数组为包含预设个数的第二预设字节数据 的数组;以及当检查模块14判定读取到的类型标志为第三标志时,初始化第一数组为包含 预设长度的随机数的数组,所述预设长度具体为预设个数个字节;
[0258] 第一更新子模块,用于根据第一接收模块12接收到的PIN码的长度以及检查模块 14读取到的类型标志更新第一数组中的第一个字节数据;
[0259] 第二更新子模块,用于根据第一接收模块12得到的第一PIN码数组中的数据更新 第一数组中第一个字节数据之后的相应字节数据;
[0260] 优选地,第二更新子模块具体用于:判断读取模块13得到的第一 PIN码数组的长 度是否能被2整除,以及当判定结果为是时对第一 PIN码数组中的数据以每两个字节数据 为一组分别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,当判定结 果为否时对第一 PIN码数组中最后一个字节数据之前的数据以每两个字节数据为一组分 别进行第一预设转换,并用转换结果更新第一数组中的相应字节数据,对第一 PIN码数组 中最后一个字节数据进行第二预设转换,并用转换结果更新第一数组中的相应字节数据。
[0261] 第二处理模块16,用于对读取模块13得到的第一主账号数组进行第二预设处理;
[0262] 具体地,本实施例中,第二处理模块16具体包括:
[0263] 第二初始化子模块,用于初始化第二数组;
[0264] 优选地,第二初始化子模块具体用于:初始化第二数组为包含预设个数的第五预 设字节数据的数据;
[0265] 第三更新子模块,用于根据读取模块13得到的第一主账号数组中的数据更新第 二数组中的相应字节数据;
[0266] 优选地,第三更新子模块具体用于:判断读取模块13得到的第一主账号数组的长 度是否小于第二预设长度,若不小于则对第一主账号数组中从低位端起,长度等于第二预 设长度的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果更新第二数 组中的相应字节数据;若小于则判断第一主账号数组的长度能否被2整除,若能整除则对 第一主账号数组中的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果 更新第二数组中的相应字节数据,若不能整除则对第一主账号数组中的第一个字节数据进 行第四预设转换,并用转换结果更新第二数组中的相应字节数据,对第一主账号数组中第 一个字节数据之后的数据以每两个字节数据为一组分别进行第三预设转换,并用转换结果 替换第二数组中的相应字节数据。
[0267] 运算模块17,用于对第一处理模块15的处理结果与第二处理模块16的处理结果 进行预设运算;
[0268] 本实施例中,运算模块17具体用于对第一处理模块15的处理结果与第二处理模 块16的处理结果进行异或运算。
[0269] 加密模块18,用于当检查模块14判定读取到的类型标志为第一标志或第二标志 时,根据第一存储模块11中存储的预设密钥、采用预设算法,对运算模块17的运算结果进 行加密得到转换后的PIN码,以及用于当检查模块14判定读取到的类型标志为第三标志 时,根据第一存储模块11中存储的预设密钥、采用预设算法,对第一处理模块15的处理结 果进行加密得到转换后的PIN码;
[0270] 发送模块19,用于将加密模块18得到的转换后的PIN码和读取模块13读取到的 主账号信息发送给服务器2进行验证。
[0271] 进一步地:
[0272] 本实施例中,第一初始化子模块还用于初始化第一索引;
[0273] 本实施例中,第一更新子模块具体用于根据第一接收模块12接收到的PIN码的长 度以及检查模块14读取到的类型标志更新第一数组中与第一索引的当前值对应的字节数 据;
[0274] 优选地,第一更新子模块用于:根据检查模块14读取到的类型标志设置第一数组 中与第一索引的当前值对应的字节数据的前半个字节,根据第一接收模块12接收到的PIN 码的长度设置第一数组中与第一索引的当前值对应的字节数据的后半个字节;
[0275] 本实施例中,第二更新子模块具体包括:
[0276] 第一更新单元,用于当第一索引的值小于第一接收模块12得到的第一PIN码数组 的长度的二分之一取整时,根据第一 PIN码数组中与第一索引的当前值的二倍对应的字节 数据以及与第一索引的当前值的二倍加1对应的字节数据进行计算,用计算结果更新第一 数组中与第一索引的当前值加1对应的字节数据;
[0277] 优选地,第一更新单元具体用于:将第一接收模块12得到的第一 PIN码数组中与 第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第一数 据,将第一 PIN码数组中与第一索引的当前值的二倍加 1对应的字节数据减去第三预设字 节数据后得到第二数据,将第一数据与第二数据进行或运算,用或运算结果更新第一数组 中与第一索引的当前值加1对应的字节数据;
[0278] 第二更新单元,用于当第一更新单元操作完成后更新第一索引的值为其当前值加 上预设步长;
[0279] 第一判断单元,用于当第二更新单元操作完成后判断第一索引的值是否小于第一 PIN码数组的长度的二分之一取整;
[0280] 第二判断单元,用于当第一索引的值不小于第一 PIN码数组的长度的二分之一取 整时,判断第一 PIN码数组的长度是否能被2整除;
[0281] 第三更新单元,用于当第二判断单元判定第一PIN码数组的长度不能被2整除时, 根据第一 PIN码数组中与第一索引的值的二倍对应的字节数据,以及第一数组中与第一索 引的值的当前值加1对应的字节数据进行计算,用计算结果更新第一数组中与第一索引的 当前值加1对应的字节数据;
[0282] 优选地,第三更新单元具体用于:将第一接收模块12得到的第一 PIN码数组中与 第一索引的当前值的二倍对应的字节数据减去第三预设字节数据后左移4位得到第三数 据,将第一数组中与第一索引的值的当前值加1对应的字节数据与第四预设字节数据进行 与运算得到第四数据,将第三数据与第四数据进行或运算,用或运算结果更新第一数组中 与第一索引的当前值加1对应的字节数据;
[0283] 本实施例中,第二初始子模块还用于初始化第二索引和第三索引;
[0284] 本实施例中,第三更新子模块具体包括:
[0285] 检查单元,用于检查读取模块13得到的第一主账号数组的长度;
[0286] 第四更新单元,用于当检查单元判定第一主账号数组的长度小于第二预设长度 时,计算第二预设长度与主账号数组的长度的差值的二分之一,更新第二索引的值为其当 前值加上计算结果;
[0287] 第三判断单元,用于当第四更新单元操作完成后,判断第一主账号数组的长度是 否能被2整除;
[0288] 第五更新单元,用于当第三判断单元判定第一主账号数组的长度不能被2整除 时,根据第一主账号数组中与第三索引的值对应的字节数据进行计算,用计算结果更新第 二数组中与第二索引当前值对应的字节数据,更新第二索引的值为其当前值加上预设步 长,更新第三索引的值为其当前值加上预设步长;
[0289] 优选地,第五更新单元,具体用于:当第三判断单元判定第一主账号数组的长度不 能被2整除时,将第一主账号数组中与第三索引的值对应的字节数据减去第三预设字节数 据得到第四数据,用第四数据更新第二数组中与第二索引当前值对应的字节数据,更新第 二索引的值为其当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
[0290] 第六更新单元,用于当检查单元判定第一主账号数组的长度大于第二预设长度 时,更新第三索引的值为第一主账号数组的长度与第二预设长度的差值;
[0291] 第七更新单元,用于当检查单元判定第一主账号数组的长度等于第二预设长度 时、第六更新单元操作完成后、第三判断单元判定第一主账号数组的长度能被2整除时、第 五更新单元操作完成后、以及第四判断单元判定结果为是时,根据第一主账号数组中与第 三索引的当前值对应的字节数据以及与第三索引的当前值加1对应的字节数据进行计算, 用计算结果更新第二数组中与第二索引的当前值对应的字节数据,更新第二索引的值为其 当前值加上预设步长,更新第三索引的值为其当前值加上预设步长;
[0292] 优选地,第七更新单元具体用于:当检查单元判定第一主账号数组的长度等于第 二预设长度时、第六更新单元操作完成后、第三判断单元判定第一主账号数组的长度能被2 整除时、第五更新单元操作完成后、以及第四判断单元判定结果为是时,将第一主账号数组 中与第三索引的当前值对应的字节数据减去第三预设字节数据后左移4位得到第五数据, 将第一主账号数组中与第三索引的当前值加1对应的字节数据减去第三预设字节数据后 得到第六数据,将第五数据和第六数据进行或运算,用或运算结果更新第二数组中与第二 索引的当前值对应的字节数据,更新第二索引的值为其当前值加上预设步长,更新第三索 引的值为其当前值加上预设步长
[0293] 第四判断单元,用于在第七更新单元操作完成后,判断第二索引的值是否小于预 设值。
[0294] 服务器2包括:
[0295] 第二接收模块21,用于接收读卡终端1发送的主账号信息以及转换后的PIN码;
[0296] 验证模块22,用于根据第二接收模块21接收到的主账号信息对第二接收模块21 接收到的转换后的PIN码进行验证;
[0297] 响应模块23,用于在验证模块22验证通过时允许读卡终端1的后续访问,以及在 验证模块22验证未通过时拒绝读卡终端1的后续访问,并向读卡终端1返回验证未通过的 提示信息。
[0298] 进一步地,服务器2还包括第二存储模块24,用于存储PIN码和与读卡终端中的预 设密钥相对应的密钥;
[0299] 第二接收模块21,还用于根据接收到的主账号信息得到第二主账号数组;
[0300] 验证模块22具体包括:
[0301] 解密子模块221,用于根据第二存储模块24中存储的密钥,采用与读卡终端采用 的预设算法相对应的算法,对第二接收模块21接收到的转换后的PIN码进行解密,得到明 文数据;
[0302] 读取子模块222,用于从第二存储模块24中读取与第二接收模块21接收到的主账 号信息对应的PIN码,以及根据读取到的PIN码得到第二PIN码数组;
[0303] 第一判断子模块223,用于从解密子模块221得到的明文数据中获取用户输入的 PIN码的长度,判断用户输入的PIN码的长度是否等于读取子模块222读取到的PIN码的长 度;
[0304] 第二判断子模块224,用于当第一判断子模块223的判断结果为是时,从解密子模 块221得到的明文数据中获取类型标志的值,根据获取到的类型标志的值判断类型标志的 类型;
[0305] 第一处理子模块225,用于对读取子模块222得到的第二PIN码数组进行第一预设 处理;
[0306] 第二处理子模块226,用于对第二接收模块21得到的第二主账号数组进行第二预 设处理;
[0307] 运算子模块227,用于对第一处理子模块225的处理结果和第二处理子模块226的 处理结果进行预设运算;
[0308] 验证子模块228,用于当第二判断子模块224判定类型标志为第一标志或第二标 志时,判断运算子模块227的运算结果中与PIN码相关部分的数据是否与解密子模块221 得到的明文数据中与PIN码相关部分的数据一致,以及当第二判断子模块224判定类型标 志为第三标志时,判断第一处理子模块225的处理结果中与PIN码相关部分的数据是否与 解密子模块221得到的明文数据中与PIN码相关部分的数据一致;
[0309] 响应模块23,具体用于当验证子模块228的判定结果为一致时允许读卡终端1的 后续访问,当验证子模块228的判定结果为不一致或第一判断子模块223判断结果为否时 拒绝读卡终端1的后续访问,并向读卡终端1返回验证未通过的提示信息。
[0310] 本实施例中,提供一种PIN码保护系统,系统中的读卡终端引入了主账号和/或伪 随机数对PIN码进行加密处理,增加了 PIN码的破解难度,读卡终端将上述加密处理后的 PIN码传输给服务器进行验证,服务器采用对应的方法进行PIN码验证,当验证通过时允许 读卡终端的后续访问,验证不通过时拒绝读卡终端的后续访问,能够有效保护PIN码在传 输过程中的安全。
[0311] 以上所述的实施例只是本发明较优选的【具体实施方式】,本领域的技术人员在本发 明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。
【权利要求】
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具体包括: 步骤El :所述读卡终端检查所述第一主账号数组的长度,若所述第一主账号数组的长 度小于所述第二预设长度,则计算所述第二预设长度与主账号数组的长度的差值的二分之 一,更新所述第二索引的值为其当前值加上计算结果,执行步骤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对应的字节数据减去所述第三预设字节数据 后得到第六数据,将所述第五数据和所述第六数据进行或运算,用或运算结果更新所述第 二数组中与所述第二索引的当前值对应的字节数据,更新所述第二索引的值为其当前值加 上所述预设步长,更新所述第三索引的值为其当前值加上预设步长。
【文档编号】H04L29/06GK104092683SQ201410318395
【公开日】2014年10月8日 申请日期:2014年7月4日 优先权日:2014年7月4日
【发明者】陆舟, 于华章 申请人:飞天诚信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1