在当今数字化时代,信息安全显得尤为重要。EXTJS作为一款流行的JavaScript框架,常被用于构建复杂的Web应用程序。其中一个关键环节就是用户密码验证。本文将揭秘EXTJS密码验证技巧,帮助您轻松提高系统安全。
一、密码强度验证
密码强度是保证系统安全的第一道防线。在EXTJS中,我们可以通过自定义验证函数来实现密码强度验证。
Ext.form.field.VTypes['passwordStrength'] = function(value){
var strength = 0;
if(value.length < 6){
strength += 1;
}
if(/[a-z]/.test(value)){
strength += 1;
}
if(/[A-Z]/.test(value)){
strength += 1;
}
if(/[0-9]/.test(value)){
strength += 1;
}
if(/[^a-zA-Z0-9]/.test(value)){
strength += 1;
}
return strength >= 3;
};
Ext.form.field.VTypes['passwordStrengthText'] = '密码强度太弱';
Ext.form.field.VTypes['passwordStrengthMask'] = 1;
二、密码复杂度提示
为了提高用户体验,我们可以在密码输入框旁边添加一个提示,告知用户密码复杂度的要求。
Ext.create('Ext.form.field.Text', {
fieldLabel: '密码',
name: 'password',
vtype: 'passwordStrength',
fieldStyle: 'text-align:right',
listeners: {
'change': function(field, newValue, oldValue){
if(newValue.length >= 6 && /[a-z]/.test(newValue) && /[A-Z]/.test(newValue) && /[0-9]/.test(newValue) && /[^a-zA-Z0-9]/.test(newValue)){
field.nextSibling().setText('强');
}else{
field.nextSibling().setText('弱');
}
}
},
plugins: [
Ext.create('Ext.grid.plugin.CellEditing', {
clicksToEdit: 1
})
],
items: [{
xtype: 'label',
text: '弱',
style: {
color: 'red',
fontSize: '12px',
position: 'absolute',
right: 5,
top: 5
}
}]
});
三、密码加密存储
为了防止密码泄露,我们需要对用户密码进行加密存储。在EXTJS中,我们可以使用MD5加密算法来实现。
”`javascript Ext.util.MD5 = function(string) {
function MD5(string, key, length) {
key = key || "";
var x = [],
k, AA, BB, CC, DD, a, b, c, d;
var S11 = 7, S12 = 12, S13 = 17, S14 = 22;
var S21 = 5, S22 = 9, S23 = 14, S24 = 20;
var S31 = 4, S32 = 11, S33 = 16, S34 = 23;
var S41 = 6, S42 = 10, S43 = 15, S44 = 21;
x[0] = [
7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21
];
x[1] = [
5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21
];
x[2] = [
4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21
];
x[3] = [
6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21, 7, 12, 17, 22, 5, 9, 14, 20, 4, 11, 16, 23, 6, 10, 15, 21
];
k = x[key.length % 4];
AA = 0x67452301;
BB = 0xEFCDAB89;
CC = 0x98BADCFE;
DD = 0x10325476;
a = b = c = d = 0;
for(i = 0; i < string.length; i += 16){
AA = FF(AA, BB, CC, DD, string.charCodeAt(i), S11);
DD = FF(DD, AA, BB, CC, string.charCodeAt(i+1), S12);
CC = FF(CC, DD, AA, BB, string.charCodeAt(i+2), S13);
BB = FF(BB, CC, DD, AA, string.charCodeAt(i+3), S14);
AA = FF(AA, BB, CC, DD, string.charCodeAt(i+4), S11);
DD = FF(DD, AA, BB, CC, string.charCodeAt(i+5), S12);
CC = FF(CC, DD, AA, BB, string.charCodeAt(i+6), S13);
BB = FF(BB, CC, DD, AA, string.charCodeAt(i+7), S14);
AA = FF(AA, BB, CC, DD, string.charCodeAt(i+8), S11);
DD = FF(DD, AA, BB, CC, string.charCodeAt(i+9), S12);
CC = FF(CC, DD, AA, BB, string.charCodeAt(i+10), S13);
BB = FF(BB, CC, DD, AA, string.charCodeAt(i+11), S14);
AA = FF(AA, BB, CC, DD, string.charCodeAt(i+12), S11);
DD = FF(DD, AA, BB, CC, string.charCodeAt(i+13), S12);
CC = FF(CC, DD, AA, BB, string.charCodeAt(i+14), S13);
BB = FF(BB, CC, DD, AA, string.charCodeAt(i+15), S14);
}
a = FF(a, AA, BB, CC, 0x80450000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x00000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11);
a = FF(a, FF(DD, AA, BB, CC, 0x80000000, S12), DD, AA, 0x80000000, S13);
a = FF(a, FF(AA, BB, CC, DD, 0x80000000, S14), AA, BB, 0x80000000, S11);
a = FF(a, FF(BB, CC, DD, AA, 0x80000000, S12), BB, CC, 0x80000000, S13);
a = FF(a, FF(CC, DD, AA, BB, 0x80000000, S14), CC, DD, 0x80000000, S11
