欢迎光临
我一直在奋斗

DiyBox授权码生成 很火的校园网路由器DiyBox授权算法分析

DIYBOX授权码生成

算法的核心思想


算法的核心思想是通过传入的手机号和特定的前缀字符生成待处理的字符串,然后使用MD5摘要加密算法对其进行加密。而由于获取到的是byte类型的数据,如果要转化为整型则需要与上0xff。否则会取到负数。然后取从第7位开始到13位的之间的6位作为验证码。


补充知识

如byte temp1 = (byte) 0xA0;
如果直接输出System.out.println(temp),结果是-96。
因为在系统了0XA0表示的是11111111 11111111 11111111 01011111(补码)
因为byte在java里面只有8位,所以前面的那24位是不存在的。只是为了方便后面的计算。
如果&0XFF(实际为0X00FF)
00000000 00000000 00000000 11111111
0xA0
11111111 11111111 11111111 01011111
这两个补码与上后为:
00000000 00000000 00000000 01011111
然后取反+1后为
00000000 00000000 00000000 10100000(原码)
结果为160

package cn.dyhack.test;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class DiyBoxDecoder {

    public static void decode(String accountId) throws NoSuchAlgorithmException
    {
        String sum = "????#"+accountId;
        MessageDigest md5 =MessageDigest.getInstance("MD5");
        md5.update(sum.getBytes());
        byte[] temp =md5.digest();
        StringBuffer result = new StringBuffer();
        System.out.println(temp.length);
        for(byte p:temp)
        {
            result.append(Integer.toHexString(p&0xff));
        }   
        System.out.println(result);
        System.out.println((String)result.subSequence(7, 13));
    }

    public static void main(String args[]) throws NoSuchAlgorithmException
    {
        DiyBoxDecoder.decode("11111111111\n");
    }

}

未经允许不得转载:奋斗者的足迹 » DiyBox授权码生成
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

奋斗者的足迹

联系我们加入我们