简单的密码破解方法

public class MiMaBiao {
    public String miwen;
    public String mingwen;
    
    
    public MiMaBiao(String miwen ,String mingwen){
        this.miwen = miwen;
        this.mingwen = mingwen;
    }
 
}
public class Decode {
    private  MiMaBiao[] mimaben = {
            new MiMaBiao("tyt", "好"),
            new MiMaBiao("huy", "这"),
            new MiMaBiao("bvn", "天"),
            new MiMaBiao("jkl", "是"),
            new MiMaBiao("lgc", "你"),
            new MiMaBiao("qqq", "哈"),
            new MiMaBiao("dz", "才"),
            new MiMaBiao("aer", "人"),
            new MiMaBiao("zse", "个"),
            new MiMaBiao("uef", "真"),
            new MiMaBiao("out", "妙"),
            new MiMaBiao("ygh", "小"),
    };
    
    
    public void decode(String mima){
           int i = 0;
        //遍历传入的密码
        while(i < mima.length() ){
            //遍历密码表
            boolean flag = false;
            for(int j = 0;j<mimaben.length;j++){
                if (mima.charAt(i) == mimaben[j].miwen.charAt(0)) {
                    flag = true;
                    System.out.println(mimaben[j].mingwen);
                    //遍历密码表的密文
                    String mi  = mimaben[j].miwen;
                    for(int m = 0 ; m < mi.length();m++){
                        //这里我只设置i的光标到哪里
                        i = mima.indexOf(mi.charAt(m),i);
                        i++;
                    }
                    break;
                }
            }
            if (!flag ) {
                i++;
            }
        }
    }
    public void decodeI(String mima){
        //通过递归完成刚才的解密任务
        //首先每次输入的密码,我们均认为新的一个密文
        //如果这个密文的长度变为0了,那么我就可以退出这个方法了
        //方法递归时,每次我们都用上一次查询完新创建的一个字符串,进行新的查询过程
        boolean flag = false;
        for (int i = 0; i < mimaben.length; i++) {
            if (mima.length() == 0) {
                return;
            }
            //如果输入密码的首字母在某次循环和密码本的首字母相同。则认为找到了这个字
            if (mima.charAt(0) == mimaben[i].miwen.charAt(0)) {
                flag = true ;
                //输出这个找到的字
                System.out.println(mimaben[i].mingwen);
                //获取这个密码本的密文
                String temp =  mimaben[i].miwen;
                //使用这个密文,尝试截断字符串
                for (int j = 0; j < temp.length(); j++) {
                     int jiedain = mima.indexOf(temp.charAt(j));
                     mima= mima.substring(jiedain+1, mima.length());
                }
            }
            
                
        }
        if (!flag) {
            mima=mima.substring(1);
        }
        decodeI(mima);
        }
}

public class TestMain {
    public static void main(String[] args) {
        String mima = new String("qfhiqcgyqlhuaghfdkucuvnjdkefjiu"
                + "iukaaaclzseybhfgwefhbccvnfffdz");
        
        Decode decode = new Decode();
        
        decode.decodeI(mima);
;    }
}


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值