微信小程序 MD5的方法详解及实例代码
微信小程序MD5的方法详解
生成的文件可以放在 utils文件中哦!!!
/*
*AJavaScriptimplementationoftheRSADataSecurity,Inc.MD5Message
*DigestAlgorithm,asdefinedinRFC1321.
*Version1.1Copyright(C)PaulJohnston1999-2002.
*CodealsocontributedbyGregHolt
*Seehttp://pajhome.org.uk/site/legal.htmlfordetails.
*/
/*
*Addintegers,wrappingat2^32.Thisuses16-bitoperationsinternally
*toworkaroundbugsinsomeJSinterpreters.
*/
functionsafe_add(x,y)
{
varlsw=(x&0xFFFF)+(y&0xFFFF)
varmsw=(x>>16)+(y>>16)+(lsw>>16)
return(msw<<16)|(lsw&0xFFFF)
}
/*
*Bitwiserotatea32-bitnumbertotheleft.
*/
functionrol(num,cnt)
{
return(num<>>(32-cnt))
}
/*
*Thesefunctionsimplementthefourbasicoperationsthealgorithmuses.
*/
functioncmn(q,a,b,x,s,t)
{
returnsafe_add(rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b)
}
functionff(a,b,c,d,x,s,t)
{
returncmn((b&c)|((~b)&d),a,b,x,s,t)
}
functiongg(a,b,c,d,x,s,t)
{
returncmn((b&d)|(c&(~d)),a,b,x,s,t)
}
functionhh(a,b,c,d,x,s,t)
{
returncmn(b^c^d,a,b,x,s,t)
}
functionii(a,b,c,d,x,s,t)
{
returncmn(c^(b|(~d)),a,b,x,s,t)
}
/*
*CalculatetheMD5ofanarrayoflittle-endianwords,producinganarray
*oflittle-endianwords.
*/
functioncoreMD5(x)
{
vara=1732584193
varb=-271733879
varc=-1732584194
vard=271733878
for(vari=0;i>2]>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF)
}
returnstr
}
/*
*Convertanarrayoflittle-endianwordstoabase64encodedstring.
*/
functionbinl2b64(binarray)
{
vartab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
varstr=""
for(vari=0;i>5]<<(i%32))&0x3F)|
((binarray[i>>5+1]>>(32-i%32))&0x3F))
}
returnstr
}
/*
*Convertan8-bitcharacterstringtoasequenceof16-wordblocks,stored
*asanarray,andappendappropriatepaddingforMD4/5calculation.
*Ifanyofthecharactersare>255,thehighbyteissilentlyignored.
*/
functionstr2binl(str)
{
varnblk=((str.length+8)>>6)+1//numberof16-wordblocks
varblks=newArray(nblk*16)
for(vari=0;i>2]|=(str.charCodeAt(i)&0xFF)<<((i%4)*8)
blks[i>>2]|=0x80<<((i%4)*8)
blks[nblk*16-2]=str.length*8
returnblks
}
/*
*Convertawide-characterstringtoasequenceof16-wordblocks,storedas
*anarray,andappendappropriatepaddingforMD4/5calculation.
*/
functionstrw2binl(str)
{
varnblk=((str.length+4)>>5)+1//numberof16-wordblocks
varblks=newArray(nblk*16)
for(vari=0;i>1]|=str.charCodeAt(i)<<((i%2)*16)
blks[i>>1]|=0x80<<((i%2)*16)
blks[nblk*16-2]=str.length*16
returnblks
}
/*
*Externalinterface
*/
functionhexMD5(str){returnbinl2hex(coreMD5(str2binl(str)))}
functionhexMD5w(str){returnbinl2hex(coreMD5(strw2binl(str)))}
functionb64MD5(str){returnbinl2b64(coreMD5(str2binl(str)))}
functionb64MD5w(str){returnbinl2b64(coreMD5(strw2binl(str)))}
/*Backwardcompatibility*/
functioncalcMD5(str){returnbinl2hex(coreMD5(str2binl(str)))}
module.exports={
hexMD5:hexMD5
}
使用方式:
varutilMd5=require('../../utils/md5.js');
varpassword=utilMd5.hexMD5(password);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!