基于改进末位校验和双重散列函数的权限控制方法及系统与流程

未命名 07-14 阅读:132 评论:0


1.本发明涉及计算机加密及权限控制技术领域,更具体的说是涉及一种基于改进末位校验和双重散列函数的权限控制方法及系统。


背景技术:

2.目前,计算机软件中常用的权限控制方法源自于linux操作系统的文件权限管理方法,该方法是基于2的n次方位运算的,它的思路是给每个权限一个2的n次方数值,所有权限和组成一个角色,此方法利用了二进制“按位或”和“按位与”操作2n数的便利性,可快速判断是否包含权限,因此这种权限控制方法渐渐用于各类软件;但是,该方法安全性不高,容易被破解;当它应用于基于浏览器的业务时,由于每个页面在加载时都需要判断权限,开发者会将权限值存储在前端,如浏览器的localstorage中,容易导致权限被篡改或套用,进而数据信息存在安全风险。
3.因此,如何避免权限被篡改或套用,提供一种安全性和可靠性高的权限控制方法,保证数据信息安全;是本领域技术人员亟需解决的问题。


技术实现要素:

4.鉴于上述技术问题,本发明提供至少解决上述部分技术问题的一种基于改进末位校验和双重散列函数的权限控制方法及系统,该方法基于改进末位校验和双重散列技术对应生成末位校验码和独立校验码,通过校验码进行两层验证,验证通过后使用角色,该权限控制方法安全性和可靠性高,使用该方法便于有效避免权限被篡改或套用,进而有助于保证软件系统数据信息的安全。
5.为实现上述目的,本发明采取的技术方案为:
6.第一方面,本发明实施例提供一种基于改进末位校验和双重散列函数的权限控制方法,该方法包括:
7.创建角色,由权限数值组成角色数值a;
8.为角色数值a生成末位校验码b,并基于双重散列函数为角色数值a生成独立的校验码c;
9.在需要判断用户是否具有相应权限时,对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后使用角色数值a的角色。
10.进一步地,所选用一个无理数与角色数值a的每一位数值进行运算,得到一位数的末位校验码b。
11.进一步地,所述校验码b跟在所述角色数值a后,形成ab样式合并存储到浏览器的localstorage中。
12.进一步地,所述双重散列函数为:
13.hj(k)≡h(k)+j
·
g(k)(mod m)
14.h(k)≡k(mod m)
15.g(k)≡k+1(mod m-2)
16.其中,j为堵塞次数,k为权限值,m为大于1的素数,0≤h(k)<m,0≤g(k)<m-2。
17.进一步地,所述校验码c与所述角色数值a分开存储,所述校验码c存储于页面内存中。
18.进一步地,先验证用户权限值的末位校验码与校验码b的一致性,验证通过后,再验证用户权限值的独立码与校验码c的一致性,两层校验都通过后允许用户使用角色数值a对应的角色。
19.第二方面,本发明实施例还提供一种一种基于改进末位校验和双重散列函数的权限控制系统,应用上述的一种基于改进末位校验和双重散列函数的权限控制方法,进行权限控制,该系统包括:角色创建模块,校验码生成模块和验证模块,其中:
20.所述角色创建模块,用于创建角色,由权限数值组成角色数值a;
21.所述校验码生成模块,用于为角色数值a生成末位校验码b,并基于双重散列函数为角色数值a生成独立的校验码c;在需要判断用户是否具有相应权限时,还用于对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;
22.所述验证模块,用于验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后允许用户使用角色数值a的对应角色。
23.与现有技术相比,本发明至少具有如下有益技术效果:
24.1、本发明提供了一种基于改进末位校验和双重散列函数的权限控制方法及系统,该方法基于改进末位校验和双重散列技术分别对应生成末位校验码和独立校验码,通过校验码进行一致性验证,验证通过后使用角色,该权限控制方法安全性和可靠性高,使用该方法便于有效避免权限被篡改或套用,进而有助于保证软件系统数据信息的安全。
25.2、本发明提供的一种基于改进末位校验和双重散列函数的权限控制方法,在第一层末位校验中,有无穷多个无理数可供选择,第二层的独立校验又有无穷多的质数对可供选择,并且检验码分开存储,该方法简单,安全性高,计算量少,适用性也好;若从某系统切换到另一系统,仅需修改三位数即可,即便熟知整个加密算法的开发人员也无法套用和篡改权限;该方法在保证安全性和可靠性的同时也具有低成本的特性,无需为不同的软件系统单独设计权限控制算法。
26.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书以及附图中所特别指出的结构来实现和获得。
27.下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
28.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
29.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
30.图1为本发明实施例提供的一种基于改进末位校验和双重散列函数的权限控制方法的流程示意图。
31.图2为本发明实施例提供的一种基于改进末位校验和双重散列函数的权限控制系统的结构示意图。
具体实施方式
32.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。
33.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
34.在介绍本发明的实施方式之前,为了便于理解,首先对当前的权限控制方法进行简单介绍:
35.当前比较流行的权限控制思路源自于linux操作系统的文件权限管理方法,此方法充分利用了二进制“按位或”和“按位与”快速操作2n数的便利性,可快速判断是否包含权限,可简单的增、删权限。
36.此方法实现思路举例如下。
37.设某个模块有4项数据操作权限,分别是:编辑、导出、核审、删除,给这4个权限分别赋值为21、22、23、24;观察下表1。
38.表1数据操作权限
39.权限十进制二进制权限合并编辑21=200000102导出22=400001004核审23=800010008删除24=16001000016编辑+核审2+8=1000010102|8编辑+核审+删除2+8+16=2600110102|8|16
40.从上表可以看出,当权限值是2n时,刚好占用了二进制位中的一位,如果要合并多个权限,可以直接把权限数加到原有权限数值上去,更快的办法用“位或”运算“|”加上。例如需要在“编辑+核审”权限上再增加一个导出权限,可以用2+8+4得到,也可以用位或2|8|4得到。如果需要去掉一个权限,可以直接从现有的权限值中减去需要去掉的权限值,也可以用“异或”运算“^”去掉,例如从“编辑+核审+删除”中移除删除权限,可以直接用26减去16得到10,也可以用异或运算26^16=10。
41.当需要判断用户是否具有某项权限时,可以用“位与”运算“&”。例如,如果用户权限值是26,当我们需要判断此用户是否有导出权限4时,只需要用26与4做“位与”运算,26&4
=0,表明没有导出权限。但26&8=8,表明26含有核审权限,26&16=16,表明26中含有删除权限。
42.在这种思路下,每个用户的权限由一个数值组成,它的优点是一个数可包含多个权限,占用的存储空间少,只需要位或、异或、位与三种运算方法即可完成权限的增加、删除和判断。因此这种权限控制方法渐渐用于各类软件,但是,当它应用于基于浏览器的业务时,由于每个页面在加载时都需要判断权限,开发者会将权限值存储在前端,如浏览器的localstorage中,可能会导致权限被篡改或套用,在使用时必须经过加密和验证。因此,本发明针对上述缺陷进行改进。
43.下面结合附图,对本发明的一些实施方式作详细说明。
44.实施例1:
45.参照图1所示,本发明提供了一种基于改进末位校验和双重散列函数的权限控制方法,该方法包括:
46.创建角色,由权限数值组成角色数值a;
47.第一层末位校验,为角色数值a生成末位校验码b;第二层独立校验,用双重散列函数为角色数值a生成独立的校验码c;
48.在需要判断用户是否具有相应权限时,对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后使用角色数值a对应的角色。
49.具体实施方式如下:
50.第一,对权限值进行末位校验,即对权限值的每一位数值进行运算,得到一个校验位,将校验位跟到权限值后面,举例如下。
51.设权限值是23+29+211+212+218=268808,约定一个校验算法,例如取的小数点后六位236067与以上权限进行以下计算:
[0052]2×
2+3
×
6+6
×
8+0
×
8+6
×
0+7
×
8=126,此计算得到的数不是个位数,不方便做校验,可计算126被8整除所得的余数6,即126≡6(mod 8),取6作为校验位,于是权限值是2688086。当程序收到这个权限时,分离出最后一位,对其进行同样的计算,验证最后一位是不是6,是则认为权限有效,否则无效。
[0053]
这种方法的优点有三,一是各个角色权限位数不确定,而无理数有无限多位小数可供使用,可满足任意大小的权限;二是可从无理数小数后的任意一位开始计算,使破解难度更大;三是有无穷多的无理数可供使用,例如,上例中的可取成等。当我们开发新的程序时,仅仅替换此无理数即可。
[0054]
当权限值存储到浏览器前端时,用这个方法可以防止篡改成其它权限,但有两个缺点:一,由于校验位只有一位数字,只需10次暴力测试就可试出;二,校验位显式的紧跟在权限值后,仍然有被套用或冒用的可能,因此需要做下面的第二层校验。
[0055]
第二,生成一个与权限值分离的、另行存储的校验码。由于权限值是管理员通过前端勾选角色功能时动态生成的,各功能间可以随意搭配组成角色,每个角色一个权限值,如果一个系统有n个功能可以组合,那么此系统一共可能有种不同的权限值。假设某系统有20种不同的功能,那么权限组合数多达1233331种,所以无法提前为每一种权限组合预
先定一个校验码。
[0056]
本发明实施例中,利用同余算法为每个权限值生成一个正整数校验码,设角色权限值为k,定义最简单的散列函数h(k)≡k(mod m),即h(k)为权限k模m的最小正剩余,有0≤h(k)<m。根据角色数量的多少,合理的选择m,优选的是素数,使得不同权限能够较为均匀地分配到一个0到m-1范围内的校验码。但只此一个散列函数容易导致堵塞,可能生成多个相同的校验码。
[0057]
为解决堵塞,本发明实施例中,利用称为双重散列(double hashing)的技术,在第一个散列函数的基础上再加一个散列函数。
[0058]
例如,可定义g(k)≡k+1(mod m-2),则0≤g(k)<m-2,理想情况下m-2也是一个素数,从而g(k)的值能够较为均匀地分布。有了第二个散列函数,遇到h(k)堵塞,可取hj(k)≡h(k)+j
·
g(k)(modm),其中j为堵塞次数。
[0059]
举例说明:设某系统有20个功能点,这些功能点大概需要组合成约60个角色,我们可取两个相邻的质数m=61,m-2=59创建双重散列:
[0060]
h(k)≡k(mod 61)
[0061]
g(k)≡k+1(mod 59)
[0062]
hj(k)≡h(k)+j
·
g(k)(mod 61)
[0063]
下表2中随机抽取出8个角色权限并计算其校验码。其中h(56720)≡51(mod 61),可取51为56720的校验码,而h(306698)≡51(mod 61),51已被占用,所以计算g(306698)=306698+1(mod 59)=17(mod 59),
[0064]
h1(306698)=51+1
×
17(mod 61)=7(mod 61),因此取7为306698的校验码。同样,第一次得到796212的校验码40与之前的重复,第二次计算得到48,而48也被占用,进行第三次计算40+2
×
8(mod 61)=56(mod 61),56还是被占用,需进行第四次计算40+3
×
8(mod 61)=3(mod 61),因此取3为796212的校验码。
[0065]
表2随机抽取出的8个角色权限并计算其校验码
[0066]
功能组合角色权限(k)h0(k)h1(k)h2(k)h3(k)1,2,3,5,6,7,9,10,11382240
ꢀꢀꢀ
3,9,11,12,1826880842
ꢀꢀꢀ
4,7,8,10,11,12,14,155672051
ꢀꢀꢀ
2,4,5,6,7,11,12,15,1956344448
ꢀꢀꢀ
4,5,8,9,13,14,16,1961521631
ꢀꢀꢀ
1,3,9,10,11,13,15,18306698517
ꢀꢀ
5,7,12,14,15,17,19,20175734456
ꢀꢀꢀ
2,4,5,9,10,13,18,197962124048563
[0067]
当用户选择完角色功能并保存时,在服务端使用上述算法生成校验码,连同计算次数j一并存储,用户登陆验证后从服务端同时返回其权限值、校验码、计算次数,在前端将它们分开存储,例如可将权限值存到浏览器的localstorage中,将其校验码和计算次数存到页面内存中,使用时先对权限进行第一层尾数校验,尾数校验通过后,用与服务端同样的算法进行第二层独立码校验,两层校验都通过后再分解权限值。
[0068]
如果某个系统角色值过多,可能会出现相同的校验码,虽然不影响校验,但可能会
被反复测试出来,可优选的选用较大的质数对创建散列函数以减少重复校验码。如果系统很大,可能有上千种不同的权限,可以优选的选择2549、、2551、4919、4931这样的质数对。
[0069]
有一种情况,用户在使用功能搭配角色时,有可能创建了两个完全一样的数值的角色,例如可能存在两个615216,此时第一个615216的校验码为31,第二个615216的校验码为31+24=55,在前端看来,两个角色因校验码而不同。
[0070]
经过以上两层校验,将一个通用的、众所周知的权限控制方法改进为无法篡改和套用,又因为有无穷多的无理数和质数,每个程序选用不同的数,因此,可使有编程经验并熟知这一权限算法的人也无法破解。
[0071]
由上述实施例的描述,本领域技术人员可获知,本发明公开了一种基于改进末位校验和双重散列函数的权限控制方法,该方法用双重散列技术生成独立检测序列,配合同余校验,能够较好的防止权限篡改和套用。其特点是每个权限组合必须配合专有的校验码共同使用,优点是同一算法仅需更换散列函数种子数即可应用于多个软件,不必为每个软件单独制定权限控制算法。该方法简单有效,计算量少;在第一层尾数校验中,有无穷多个无理数可供选择,第二层的独立校验又有无穷多的质数对可供选择,安全性高,适用性好;若从某系统切换到另一系统,仅需修改三位数即可,即便熟知整个加密算法的开发人员也无法套用和篡改权限;进而有助于保证软件系统数据信息的安全。
[0072]
实施例2:
[0073]
参照图2所示,本发明还提供一种基于改进末位校验和双重散列函数的权限控制系统,应用上述实施例1中的一种基于改进末位校验和双重散列函数的权限控制方法,加密验证进行权限控制管理。如图2所示,该系统包括:角色创建模块,校验码生成模块和验证模块,其中:
[0074]
角色创建模块,用于创建角色,由权限数值组成角色数值a;
[0075]
校验码生成模块,用于为角色数值a生成末位校验码b,并基于双重散列函数为角色数值a生成独立的校验码c;在需要判断用户是否具有相应权限时;还用于对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;
[0076]
验证模块,验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后允许用户使用角色数值a的对应角色。
[0077]
本说明书中实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,对于实施例2公开的系统而言,由于其与实施例1公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0078]
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

技术特征:
1.一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,该方法包括:创建角色,由权限数值组成角色数值a;为角色数值a生成末位校验码b,并基于双重散列函数为角色数值a生成独立的校验码c;在需要判断用户是否具有相应权限时,对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后使用角色数值a对应的角色。2.根据权利要求1所述的一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,所述校验码b的生成方法具体为:选用一个无理数与角色数值a的每一位数值进行运算,得到一位数的末位校验码b。3.根据权利要求2所述的一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,所述校验码b跟在所述角色数值a后,形成ab样式合并存储到浏览器的localstorage中。4.根据权利要求1所述的一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,所述双重散列函数为:h
j
(k)≡h(k)+j
·
g(k)(modm)h(k)≡k(modm)g(k)≡k+1(modm-2)其中,j为堵塞次数,k为权限值,m为大于1的素数,0≤h(k)<m,0≤g(k)<m-2。5.根据权利要求1所述的一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,所述校验码c与所述角色数值a分开存储,所述校验码c存储于页面内存中。6.根据权利要求1所述的一种基于改进末位校验和双重散列函数的权限控制方法,其特征在于,先验证用户权限值的末位校验码与校验码b的一致性,验证通过后,再验证用户权限值的独立校验码与校验码c的一致性,两层校验都通过后允许用户使用角色数值a对应的角色。7.一种基于改进末位校验和双重散列函数的权限控制系统,其特征在于,应用如权利要求1-6任一项所述的一种基于改进末位校验和双重散列函数的权限控制方法,进行权限控制。8.根据权利要求7所述的一种基于改进末位校验和双重散列函数的权限控制系统,其特征在于,该系统包括:角色创建模块,校验码生成模块和验证模块,其中:所述角色创建模块,用于创建角色,由权限数值组成角色数值a;所述校验码生成模块,用于为角色数值a生成末位校验码b,并基于双重散列函数为角色数值a生成独立的校验码c;在需要判断用户是否具有相应权限时,还用于对用户权限值进行同样运算,获得用户权限值的末位校验码和独立校验码;所述验证模块,用于验证用户权限值的末位校验码与校验码b的一致性、验证用户权限值的独立校验码与校验码c的一致性,验证通过后允许用户使用角色数值a的对应角色。

技术总结
本发明公开了基于改进末位校验和双重散列函数的权限控制方法及系统,该方法包括:创建角色,由权限数值组成角色数值A;为角色数值A生成校验码B,并基于双重散列函数为角色数值A生成独立的校验码C;当需要判断用户是否具有相应权限时,验证用户权限数值与校验码B的一致性,验证用户权限数值与校验码C的一致性,验证通过后使用角色数值A对应的角色;该方法基于改进末位校验和双重散列技术对应生成校验码,并分开存储校验码,通过两个校验码进行一致性验证,验证通过后使用角色,该权限控制方法安全性和可靠性高,使用该方法便于有效避免权限被篡改或套用,进而有助于保证软件系统数据信息的安全。据信息的安全。据信息的安全。


技术研发人员:李良林 陈良勇 李海明 谢海东 白国龙 郭敏 顾锡莲 郭邦梅 刘宇宏
受保护的技术使用者:青海省第三地质勘查院
技术研发日:2023.04.18
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐