`

n唯数组的排列组合、md5解密算法(简单尝试)

阅读更多
package com.csair.rsa;

import java.util.ArrayList;
import java.util.List;
/**
 * 得到n位的所有组合
 * @author Administrator
 * @data Mar 21, 2012
 */
public class DDTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> list = new ArrayList<String>();
		char[] c = {'0','1','2','3','4','5','6','7','8','9'};
		for(int i = 1;i < 5;i ++){
			list = getCom(list,c,i);
			viewData(list);
		}
	}

	/**
	 * 获取所有的组合情况放置到list中
	 * @param list
	 * @param c
	 * @param n
	 * @return
	 */
	public static List getCom(List list,char[] c,int n){
		List<String> listCurrent = new ArrayList<String>();
		if(n == 1){
			for(int i = 0; i < c.length; i ++){
				listCurrent.add(c[i]+"");
			}
		}else{
			List<String> preListCurrent = getCom(list, c, n-1);
			for(int z = 0; z < preListCurrent.size(); z ++){
				for(int i = 0; i < c.length; i ++){
					listCurrent.add(preListCurrent.get(z).toString()+c[i]);
				}
			}
		}
		return listCurrent;
	}
	
	/**
	 * 读取出list中的数据
	 * @param list
	 */
	public static void viewData(List list){
		for(int z = 0; z < list.size(); z ++){
			System.out.println(list.get(z).toString());
		}
	}
}

 

package com.csair.rsa;

import java.util.ArrayList;
import java.util.List;

/**
 * 破译64位md5加密
 * @author Administrator
 * @data Mar 21, 2012
 */
public class DeMd5 {
	/**
	 * 程序运行主方法
	 * @param args
	 */
	public static void main(String[] args) {
		DeMd5 deMd5 = new DeMd5();
		String secret = "jgzkFFMRea6bf2DiA1Huiw==";
		String result = deMd5.getDeMd5(secret);
		System.out.println("解析出明文为:"+result);
	}
	
	/**
	 * 根据提供的密文,解析出原文
	 * @param secret
	 * @return
	 */
	public String getDeMd5(String secret){
		String result = "";
		boolean flag = true; 
		md5 nMd5 = new md5();
		char[] c = initDate();
		List<String> list = null;
		int length = 0;
		while(flag){
			for(int num = 1; num < 5; num ++){
				length = num;
				list = getCom(c,num);
				boolean flagC = true;
				for(int j = 0; j < list.size(); j ++){
					String value = nMd5.getMd5(list.get(j));
					if(value.equals(secret)){
						result = list.get(j).toString();
						flagC = false;
						break;
					}
				}
				if(!flagC){
					flag = false;
					break;
				}
			}
			if(length == 4){
				result = "暂时没有解析出对应的明文。";
				flag = false;
			}
		}
		return result;
	}
	
	/**
	 * 获取n个字符的所有的组合
	 * @param c
	 * @param n
	 * @return
	 */
	public List getCom(char[] c,int n){
		List<String> list = new ArrayList<String>();
		list = DDTest.getCom(list,c,n);
		return list;
	}
	
	/**
	 * 初始化字符集
	 */
	public char[] initDate(){
		char[] c= new char[62];
		for (int i = 48; i <= 57; i++) {
			c[i-48] = (char)i;
		}
		for (int i = 65; i <= 90; i++) {
			c[i-55] = (char)i;
		}
		for (int i = 97; i <= 122; i++) {
			c[i-61] = (char)i;
		}
		return c;
	}
}

 

备注:本文只是做个简单的尝试,由于md5加密算法是不可逆的,所以用的是暴力破解的方式,所有的数字、小写字母、大写字母一起排列组合,一个一个尝试加密,然后与提供的密文进行比较。如果相同,则明文就是尝试的那一个。再次申明:只是简单的尝试,如果位数过多,机器会跑不动的,会内存溢出,所以只是学习之用,了解一种思路。有的网站声称可以破解,应该是先把所以的组合的密钥都保存到数据库里面,根据用户提供的密文,到数据库中查找对应的那一个密文对应的明文,同样是需要很强的机器和内存。

分享到:
评论

相关推荐

    tictactoeleetcode-JavaPlayground:Java注解、线程使用、设计模式、算法训练等

    MD5 加密 AES256 解密 AES256 加密 AES 加密 AES 解密 数组 查找最大产品 从数组中查找缺失的数字 找到第二大值 求最小公数 查找最低、最高索引 向左移动零 基本 位移位 行分隔符 井字游戏 行分隔符 数据结构 比较器...

    C#开发实例大全(基础卷).软件开发技术联盟(带详细书签) PDF 下载

    实例152 0~N位数的任意组合 197 实例153 在数组中快速查找近似值 199 实例154 猴子选大王算法的实现 200 实例155 使用MD5算法对密码进行加密 201 实例156 凯撒密码算法的实现 202 第2篇 Windows窗体篇 第7章 Windows...

    C程序范例宝典(基础代码详解)

    实例286 MD5加密 412 实例287 RSA加密 419 实例288 DES加密 420 实例289 RC4加密 424 实例290 SHA1加密 427 实例291 恺撒加密 432 第11章 游戏 435 实例292 猜数字游戏 436 实例293 24点游戏 438...

    JAVA上百实例源码以及开源项目源代码

    Java生成密钥的实例 1个目标文件 摘要:Java源码,算法相关,密钥 Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、...

    JAVA上百实例源码以及开源项目

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    C#编程经验技巧宝典

    88 &lt;br&gt;0136 如何进行文本加密与解密 88 &lt;br&gt;0137 如何区别0、空字符串、Null、Empty和Nothing 89 &lt;br&gt;0138 从字符串中分离文件路径、文件名及扩展名 89 &lt;br&gt;0139 如何批量替换某一类字符串 89...

Global site tag (gtag.js) - Google Analytics