16进制密码从位数和规律上,是MD5之类的单向不可逆加密算法。
64位算法已经很难破解了,目前公开的逆向算法和软件都对64位加密不做破解。
另外,如果知道密码的具体加密方式还有一定的可能性。
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。
很有意思。
原文数据全为:“00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ”
加密后变成了:“09 51 55 F4 FB 10 6F A4 D3 E8 87 46 F8 2F 49 CD ; ”
得出这样的结果是有很多方法都可以实现的:
比如每个原数上加上个常数就可以了。
00+09=09;得出第一组加密后的数值
00+51=51;得出第二组加密后的数值
...
00+CD=CD;得出第16组加密后的数值.
加密的方法还有很多,不过这种最简单。
还有就是你给的原文太单一了,不能够更好的分析数据的规律。
如果你能把原文改为如下这段代码再去加密一下,再把加密结果贴上来看一下就好多了。
00000140h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00000150h: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ;
00000160h: 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ; 00000170h: 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 ;
00000180h: 11 11 11 11 11 22 22 22 22 22 22 EE EE EE FF FF
用系统自带的debug就可以搞定,点开始,点运行,然后输入debug回车,进入debug后,输入e回车,然后就可以每次输入两位,输入空格后再输入下一个两位,输完后用d命令查看。示范如下:
-e100
1365:0100 00.41 00.20 00.70 00.61 00.73 00.73 00.77 00.6f
1365:0108 00.72 00.64 00.20 00.69 00.73 00.20 00.61 00.20
1365:0110 00.63 00.6f 00.6d 00.62 00.69 00.6e 00.61 00.74
1365:0118 00.69 00.6f 00.6e 00.20 34.6f 00.66 54.20 13.63
1365:0120 00.68 00.61 00.72 00.61 00.63 00.74 00.65 00.72
-d100
1365:0100 41 20 70 61 73 73 77 6F-72 64 20 69 73 20 61 20 A password is a
1365:0110 63 6F 6D 62 69 6E 61 74-69 6F 6E 20 6F 66 20 63 combination of c
1365:0120 68 61 72 61 63 74 65 72-00 00 00 00 00 00 00 00 haracter
思路一:编写一个小程序,从后向前,每四个数字存为一组,然后将其转为十进制数字,最后合并,就是你需要的结果,谢谢~~~
思路二:再仔细看看你的上面的那一长串的数字的来源,仔细分析它的加密的算法,然后逆向破解,最后得到你的结果,谢谢~~~
祝你成功~~~
破解密码后,看到数字(十六进制值)就想要翻译成ascii码,其实这是没必要的。
加密密钥可以输入字符也可以输入十六进制值:
wep 64的是5个字符或是10个十六进制值(十六进制值是由:0123456789ABCDEF组成的)。
wep 128的是由13个字符或是26个十六进制值(十六进制值是由:0123456789ABCDEF组成的)。
破解密码后显示的都是十六进制值,那就是说只要你直接输入这些值就可以啦。
你加密使用的是Unicode编码吧。需要进行字符编码转换!
完整程序如下: (我只是一个好人而已,^_^ )
// hexlize.cpp
// Tan kaiShuai @ Antiy Labs.
// v1.0.0 10/09/2010 @ Antiy labs.
#include stdio.h
#include stdlib.h
#include windows.h
// 加密程序
VOID hexlize(LPSTR buff,size_t size, LPCSTR str){
size_t slen = strlen(str)+1;
LPWSTR szStrUnic = (LPWSTR)malloc(sizeof(WCHAR)*slen);
MultiByteToWideChar(CP_ACP,0,str,slen,szStrUnic,slen);
LPWSTR pStrUnic = szStrUnic;
while((*pStrUnic) != '\0')
{
if((size-=6) = 0) break;
sprintf(buff,"%%u%04X",(*pStrUnic));
buff += 6;
++pStrUnic;
}
free(szStrUnic);
}
// 解密程序
VOID unhexlize(LPSTR buff,size_t size, LPCSTR str){
size_t slen = strlen(str)/6+1;
LPWSTR szStrUnic = (LPWSTR)malloc(sizeof(WCHAR)*slen);
LPWSTR pStrUnic = szStrUnic;
while((*str) != '\0')
{
if(!sscanf(str,"%%u%04X",pStrUnic)) break;
str += 6;
++pStrUnic;
}
(pStrUnic++)[0] = '\0\0';
WideCharToMultiByte(CP_ACP,0,szStrUnic,(pStrUnic-szStrUnic),buff,size,NULL,NULL);
free(szStrUnic);
}
// 测试
int main(int argc, char* argv[])
{
CHAR szBuff[256];
CHAR szBuff2[256];
hexlize(szBuff,256,"你好");
printf("szBuff = %s\n",szBuff);
unhexlize(szBuff2,256,szBuff);
printf("szBuff2 = %s\n",szBuff2);
fflush(stdin); getchar();
return 0;
}
// 转载时请保留作者版权信息,谢谢!