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加密算法是不可逆的,所以用的是暴力破解的方式,所有的数字、小写字母、大写字母一起排列组合,一个一个尝试加密,然后与提供的密文进行比较。如果相同,则明文就是尝试的那一个。再次申明:只是简单的尝试,如果位数过多,机器会跑不动的,会内存溢出,所以只是学习之用,了解一种思路。有的网站声称可以破解,应该是先把所以的组合的密钥都保存到数据库里面,根据用户提供的密文,到数据库中查找对应的那一个密文对应的明文,同样是需要很强的机器和内存。
分享到:
相关推荐
该方法将输入的字符串转换为 byte 数组,然后使用 MessageDigest 类的 getInstance 方法获取 MD5 加密对象,最后将加密后的哈希值转换为字符串。 二、Base64 加密 Base64 是一种常用的编码方式,可以将二进制数据...
DES(Data Encryption Standard)是一种经典的对称加密算法,由IBM在1970年代初开发,后被美国国家标准局(NIST)采纳为标准。它使用64位的数据块进行加密,其中包含56位的有效密钥。DES的加密过程分为两步:初始...
C语言实现需创建并操作二维数组,处理矩阵中的字符排列。 7. **Vigenere密码**:是一种多表密码,使用多个Caesar密码的密钥组合。C语言实现需要动态生成多个密钥表,并逐个应用到明文中。 8. **Beaufort密码**:...
MD5 加密 AES256 解密 AES256 加密 AES 加密 AES 解密 数组 查找最大产品 从数组中查找缺失的数字 找到第二大值 求最小公数 查找最低、最高索引 向左移动零 基本 位移位 行分隔符 井字游戏 行分隔符 数据结构 比较器...
- `md5()`:计算字符串的MD5散列值。 - `microtime()`:获取当前时间的微秒级精度的时间戳。 - `base64_encode()` 和 `base64_decode()`:进行Base64编码和解码。 3. **数组函数**: - `array()`:创建新的数组...
5. **加密和解密**:使用生成的密钥对明文进行加密,解密时则需要逆向执行相同的步骤。 在Java代码中,会定义一个`Solitaire`类,包含这些操作的函数,如`shuffle()`(洗牌)、`cut()`(切牌)和`deal()`(发牌)。...
实例286 MD5加密 412 实例287 RSA加密 419 实例288 DES加密 420 实例289 RC4加密 424 实例290 SHA1加密 427 实例291 恺撒加密 432 第11章 游戏 435 实例292 猜数字游戏 436 实例293 24点游戏 438...
7. 回溯法:解决组合问题、排列问题、N皇后问题等。 8. 贪心算法:在每一步选择最优解,如活动选择问题、背包问题。 9. 分治策略:快速排序、归并排序、最小生成树(Kruskal、Prim)等。 10. 图论:深度优先搜索...
它以其简单、快速的加密和解密过程而闻名,适合于低内存设备和高速数据流加密。在Java中实现RC4算法通常涉及到对原始算法的封装,以便在Java环境中方便地使用。"字母RC4"描述可能是指在RC4算法的基础上,对英文字符...
88 <br>0136 如何进行文本加密与解密 88 <br>0137 如何区别0、空字符串、Null、Empty和Nothing 89 <br>0138 从字符串中分离文件路径、文件名及扩展名 89 <br>0139 如何批量替换某一类字符串 89...
在C#中,可以使用`System.Security.Cryptography`命名空间提供的类来进行加密解密操作。 **43. MD5加密用户密码** MD5是一种散列算法,用于将密码转换成不可逆的散列值。虽然MD5已经不再安全,但在某些场景下仍然被...