G码生成算法:
第一步:计算HS = HMAC-SHA-1(K,C),HS长度为20bytes。
第二步:计算Sbits=DT(HS),Sbits是一个长度为31bits二进制字符串。
第三步:计算Snum = StToNum(Sbits),Snum为Sbits的10进制值(0,1,…,231-1)。
第四步:计算PING=Snum mod 10^6,PING为一个长度为6位的10进制数。
DT算法:
第一步:对一个长度为20bytes的字符串String=String[0]…String[19],取String[19]的低4bit值为OffsetBits。
第二步:计算Offset = StToNum(OffsetBits),Offset为Offsetbits的10进制值(0,1,…,15)。
第三步:计算P=String[Offset]…String[Offset+3]。
第四步:返回P的低31bits。
------解决思路----------------------
全用位运算吧,取a的低四位就是a&15
------解决思路----------------------
一字节怎么会出现-218,这不越界了吗……byte类型用位运算也可以,就是a&15
------解决思路----------------------
感觉有点奇怪啊
------解决思路----------------------
我就看看 不说话

------解决思路----------------------
先求负值的补码 再与上0x0f
------解决思路----------------------
加密算法 MD5呢?自己写的一般没这种开源的好。
------解决思路----------------------
公司里做项目一般都禁止开发者用自己写的加密算法