一种二维码的生成方法、验证方法及其装置与流程

文档序号:17698240发布日期:2019-05-17 21:53阅读:222来源:国知局
一种二维码的生成方法、验证方法及其装置与流程

本发明涉及信息安全领域,特别涉及一种二维码的生成方法、验证方法及其装置。可以应用在第三方支付、电子商务方向,在需要使用二维码展示用户敏感信息或进行收付款操作时使用。



背景技术:

如今移动互联网发展得越来越快,支付宝、微信等应用程序均推出了手机二维码支付技术,在购物、餐饮、票务等领域已得到广泛应用。如今二维码成为了商家和消费者成本最低的接入口,大多的线下消费者均使用手机进行支付,而这其中很多都是通过扫二维码实现的,二维码已经成为我们生活中的一个最便捷的支付工具。但是目前的二维码,基本都是明文信息,或使用特定扫二维码的客户端进行对应的特殊编码来展示信息,在进行扫码支付时,容易造成信息泄露和信息欺诈的问题。



技术实现要素:

本发明的目的在于克服现有技术的不足,提供一种安全性好的二维码的生成方法、验证方法及其装置。

本发明提供的一种二维码的生成方法,其技术方案为:

一种二维码的生成方法,

采用随机数生成函数计算密钥keyi;

使用密钥keyi加密业务字符串stringk、所述密钥keyi生成时的时间戳timelocal和用户身份标志id,得到密文c;

生成二维码信息,所述密文c作为二维码的信息之一;

其中,业务字符串stringk包括用户身份信息和/或业务信息;用户身份标志id由服务器生成并发送到应用程序app,用于标识用户身份。

优选地,采用随机数生成函数计算密钥keyi的方式为:将特殊保密字符串uid、安全字符串seed代入随机数生成函数,得到指定个数、指定字节长度的随机数,选择其中第i个随机数作为密钥keyi;其中,特殊保密字符串uid由服务器生成并发送到应用程序app,是与用户唯一对应的随机字符串;安全字符串seed是与应用程序app版本号相关的字符串。

优选地,所述采用随机数生成函数计算密钥keyi的方法具体为:

key1=keccak(seed1+rand1,n*num),其中seed1=seed,rand1=uid,n为随机数的字节长度,num为随机数的个数;

keyj=keccak(seedj+randj,n*num),其中randj=rand1+(j-1),seedj=keccak(keyj-1+randj,n*num),j=2,3,4,…,num;

由此获取num个长度为n字节的随机数,选择第i个随机数作为密钥keyi,其中,i为1≤i≤num的整数。

优选地,所述密文c采用对称加密算法加密获得。

优选地,最终生成的二维码信息还包括用户昵称、所述密钥keyi生成时的时间戳timelocal、应用程序app版本号ver、用户身份标志id和所述密钥keyi的序数i。

优选地,还包括初始化步骤,所述初始化步骤为:

1)应用程序app接收用户输入的支付密码,并将支付密码加密传递给服务器;

2)服务器收到支付密码后,进行验证,验证成功后,服务器生成用户身份标志id和特殊保密字符串uid,并返回给应用程序app;

3)应用程序app接收服务器发送的用户身份标志id和特殊保密字符串uid,并在本地加密保存。

优选地,步骤1)中,应用程序app将支付密码的hash值及用户身份信息采用服务器公钥加密后传送给服务器;

步骤2)中,服务器收到应用程序app发送的信息,采用服务器私钥解密获取用户身份信息及支付密码hash值;服务器根据用户身份信息获取用户的支付密码,并采用预设hash算法计算支付密码hash值,与接收到的支付密码hash值进行比对,比对一致,验证通过;然后服务器针对所述用户身份信息随机生成用户身份标志id和特殊保密字符串uid,并发送应用程序app,同时,服务器存储该用户的用户身份标志id和特殊保密字符串uid。

一种采用如上二维码生成方法生成的二维码的验证方法,

扫码后,将读取的二维码信息发送给服务器;

服务器根据用户身份标志id获取特殊保密字符串uid,根据应用程序app版本号ver获取安全字符串seed,并根据特殊保密字符串uid、安全字符串seed、以及密钥keyi的序数i,采用随机数生成函数获得密钥keyi;

采用获得的密钥keyi解密密文c,获得业务字符串stringk、密钥keyi生成时的时间戳timelocal和用户身份标志id,并将解密获得的密钥keyi生成时的时间戳timelocal与二维码携带的密钥keyi生成时的时间戳timelocal进行比对;

比对一致,服务器根据业务字符串stringk和/或特殊保密字符串uid获得该二维码的用户身份信息,结算交易。

本发明还提供了一种二维码的生成装置,包括:

密钥管理模块,用于根据随机数生成函数生成密钥keyi,并使用密钥keyi加密业务字符串stringk、密钥keyi生成时的时间戳timelocal和用户身份标志id,得到密文c;

二维码生成模块,用于获取二维码生成指令,自动生成所述二维码,二维码信息包括用户的昵称、密文c、密钥keyi生成时的时间戳timelocal、应用程序app版本号ver、用户身份标志id和密钥keyi的序数i。

本发明的实施包括以下技术效果:

1)由于用户身份标志id和特殊保密字符串uid离线保存在用户端,断网的情况下能够生成保护隐私的二维码。

2)二维码信息根据密钥keyi生成时的时间戳timelocal和密钥keyi自动变换,难以被破解。

3)二维码用户的隐私信息得到完整保护,整个交易过程不会以明文显示其身份信息。

4)本发明的随机数生成函数可以生成指定长度的随机数,但服务器又能根据特有的标记获取得到此随机数,既保证数的随机,又使得服务器可以快速进行二维码用户身份的匿名确认。

附图说明

图1为本发明实施例的二维码的生成方法流程示意图。

图2为动态加密方法的初始化流程示意图。

图3为本发明实施例的二维码的验证方法流程示意图。

具体实施方式

下面将结合实施例以及附图对本发明加以详细说明,需要指出的是,所描述的实施例仅旨在便于对本发明的理解,而对其不起任何限定作用。

参见图1所示,本实施例提供的一种二维码的生成方法,每次使用二维码时,应用程序app采用随机数生成函数计算密钥keyi,并使用密钥keyi加密业务字符串stringk、密钥keyi生成时的时间戳timelocal和用户身份标志id,得到密文c,生成二维码信息,密文c作为二维码的信息之一。其中,业务字符串stringk包括用户身份信息和/或业务信息,具体的,当该二维码为付款码时,该业务字符串stringk可仅包括用户身份信息;当该二维码为收款码时,该业务字符串stringk可包括用户身份信息和业务信息,也可仅包括业务信息。用户身份标志id由服务器生成并发送到应用程序app,用于标识用户身份。

具体地,采用随机数生成函数计算密钥keyi的方式为:将特殊保密字符串uid、安全字符串seed代入随机数生成函数,得到指定个数、指定字节长度的随机数,选择其中第i个随机数作为密钥keyi;其中,特殊保密字符串uid由服务器生成并发送到应用程序app,是与用户唯一对应的随机字符串;安全字符串seed是与应用程序app版本号相关的字符串,用于识别特定的应用程序app。

由上可知,二维码在每次使用时生成,而且每次密钥keyi都会变化,从而导致核心密文c发生变化,同时密钥keyi生成时的时间戳timelocal发生变化,进而导致二维码信息内容发生变化,这样就能够实现每次使用的二维码就均不同,而且二维码采用密文,不包含明文身份信息,能够很好地保护用户隐私。

本实施例中,随机数生成函数可生成任意个任意字节长度的随机数。作为一种优选的随机数生成方式,采用随机数生成函数计算密钥keyi的方法具体为:

key1=keccak(seed1+rand1,n*num),其中seed1=seed,rand1=uid,n为随机数的字节长度,num为随机数的个数;

keyj=keccak(seedj+randj,n*num),其中randj=rand1+(j-1),seedj=keccak(keyj-1+randj,n*num),j=2,3,4,…,num;

由此获取num个长度为n字节的随机数,选择第i个随机数作为密钥keyi,其中,i为1≤i≤num的整数。

密文c采用对称加密算法(如aes算法)加密,本实施例中,密文c=aes256(keyi,stringk+timelocal+id)。最终生成的二维码信息还包括用户昵称、密钥keyi生成时的时间戳timelocal、应用程序app版本号ver、用户身份标志id和密钥keyi的序数i,所述二维码显示在应用程序app的显示界面。

具体地,使用二维码前,用户登录应用程序app,打开二维码界面,应用程序app收到生成二维码的通知;应用程序app读取本地保存的用户身份标志id和特殊保密字符串uid,并生成二维码的业务字符串stringk,获取应用程序app的版本号ver,每个应用程序app版本内置有安全字符串seed,同一版本的应用程序app具有相同的安全字符串seed,该安全字符串seed预先备份在服务器和应用程序app。

参见图2所示,用户在初始化开启二维码支付功能的时候,默认需要输入支付密码进行初始化开启,所述初始化步骤为:

1)用户登录应用程序app,输入支付密码,应用程序app将支付密码加密后传递给服务器;

具体的,应用程序app接收用户输入的支付密码,并将支付密码的hash值及用户身份信息采用服务器公钥加密后传送给服务器;其中,用户身份信息可以是应用程序app账号信息、用户身份证号、或用户手机号等。

2)服务器收到支付密码后,进行验证,验证成功后,服务器将用户身份标志id和特殊保密字符串uid返回给应用程序app;

具体的,服务器收到应用程序app发送的信息,采用服务器私钥解密获取用户身份信息及支付密码hash值;服务器根据用户身份信息获取用户的支付密码,并采用预设hash算法计算支付密码hash值,与接收到的支付密码hash值进行比对,比对一致,验证通过;服务器针对该用户身份信息随机生成用户身份标志id和特殊保密字符串uid,并发送应用程序app,同时,服务器存储该用户的用户身份标志id和特殊保密字符串uid。

3)应用程序app在本地使用登录密码安全地保存用户身份标志id和特殊保密字符串uid。

具体的,应用程序app接收服务器发送的用户的用户身份标志id和特殊保密字符串uid,并以登录密码为密钥进行加密存储。

用户身份标志id和特殊保密字符串uid存在使用生命周期,如果重新更换终端设备或重新初始化二维码支付时,其需要重新输入支付密码来重复步骤1)和2)来获取新的用户身份标志id和特殊保密字符串uid;初始化完成后,在需要使用二维码进行付款/收款时,本发明的二维码的生成方法可以保证用户不需要连接互联网,在断网的情况下,在用户应用程序app在本地能够生成安全的二维码。

参见图3所示,本发明实施例还提供了二维码验证方法,交易对方扫码后,将读取的二维码信息发送给服务器,服务器根据用户身份标志id获取特殊保密字符串uid,根据应用程序app版本号ver获取安全字符串seed,并根据特殊保密字符串uid、安全字符串seed、以及密钥keyi的序数i,采用随机数生成函数获得密钥keyi,采用获得的密钥keyi解密密文c,获得业务字符串stringk、密钥keyi生成时的时间戳timelocal和用户身份标志id,并将解密获得的密钥keyi生成时的时间戳timelocal与二维码携带的密钥keyi生成时的时间戳timelocal进行比对,比对一致,则二维码有效。服务器根据业务字符串stringk和/或特殊保密字符串uid获得该二维码的用户身份信息,结算交易。至此,完成了对生成二维码用户的完整隐私保护。可见,本申请的技术方案使二维码用户的隐私信息得到完整保护,整个交易过程不会以明文信息显示其身份信息。

本实施例还提供了一种二维码的生成装置,包括密钥管理模块和二维码生成模块,密钥管理模块,用于根据随机数生成函数生成密钥keyi,并使用密钥keyi加密业务字符串stringk、密钥keyi生成时的时间戳timelocal和用户身份标志id,得到密文c;二维码生成模块,用于获取二维码生成指令,自动生成所述二维码,二维码信息包括用户的昵称、密文c、密钥keyi生成时的时间戳timelocal、应用程序app版本号ver、用户身份标志id和密钥keyi的序数i。

由于用户身份标志id和特殊保密字符串uid离线保存在用户端,在用户出示二维码进行付款或收款时,产生二维码的过程不需要联网与服务器交互就能够调用用户身份标志id和特殊保密字符串uid,而扫码收款的一方需要联网,其扫码时只能看到用户昵称,扫码后解开获取的信息,也不会泄露用户的其它敏感身份隐私信息。

最后应当说明的是,以上实施例仅用以说明本发明的技术方案,而非对本发明保护范围的限制,尽管参照较佳实施例对本发明作了详细地说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的实质和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1