关于异或算法!!(20分)

  • 主题发起人 主题发起人 风宇
  • 开始时间 开始时间

风宇

Unregistered / Unconfirmed
GUEST, unregistred user!
在许多地方看到WIN98的屏保密码加密用的是异或算法,请问异或算法是怎样的,谁有这方
面的资料!!
 
有的
我在软件报上见过
不过我觉得,在网上应该更好找的
 
随便找本逻辑学看看。
 
TO yanlei
能就我所提的问题举个例子吗????
TO delphi xp
我就是没有找到这方面的书啊!!!
to Coolbaby
在网上什么地方有下载!!
 
给你一个简单的例子:
001 XOR 101 = 100
总之,按位进行计算,如果两位相同得0,如果不同得1。
也就是半加器的效果啦。
 
那么逐字节异或是怎样的呢!!!
 
屏保密码最多8位,再多设也无意义,可以试一下。
注册表中 HKEY_CURRENT_USER/Control Panel/desktop 找
ScreenSave_Data,鼠标双击它后出现“编辑二进制值”窗口,
在下面的键值框中看最右边的字符,(两行,具体看密码多少定)
两个字符为一组,数一下几组就知道密码有几位了。
假设密码为“12345”则那里会是这样的:79,DC,45,29,52
分别与 78,DE,46,2D,57,59,91,2B 进行异或(xor),
79 xor 78, -> 1
DC xor DE, -> 2
45 xor 46, -> 3
29 xor 2D, -> 4
52 xor 57, -> 5
就可得到密码了,从密钥可知,密码最长只有8位。

Function TfrmMagic.FindScreenSaverPwd():String;//查找屏幕保护的口令
var
BTmp:Array[0..15] of Byte;
STmp:Array[1..32] of Byte;
intCount:Integer;
i:Integer;
j:Integer;
strTmp:String;
bytTmp:Byte;
strResult:String;
Begin
BTmp[0]:=(72);
BTmp[1]:=(238);
BTmp[2]:=(118);
BTmp[3]:=(29);
BTmp[4]:=(103);
BTmp[5]:=(105);
BTmp[6]:=(161);
BTmp[7]:=(27);
BTmp[8]:=(122);
BTmp[9]:=(140);
BTmp[10]:=(71);
BTmp[11]:=(248);
BTmp[12]:=(84);
BTmp[13]:=(149);
BTmp[14]:=(151);
BTmp[15]:=(95);
for i:=1 to 32 do
begin
STmp:=0;
end;
MagicReg:=TRegistry.Create;
MagicReg.RootKey:=HKEY_CURRENT_USER;
MagicReg.OpenKey('Control Panel/desktop',True);
intCount:=MagicReg.ReadBinaryData('ScreenSave_Data',STmp,Sizeof(STmp));
if intCount>0 then
Begin
j:=1;
For i:=1 To trunc((IntCount-1)/2) Do
begin
if STmp<>00 then
Begin
strTmp:=Chr(STmp[j]);
j:=j+1;
strTmp:=strTmp + Chr(STmp[j]);
bytTmp:=gStrToByte(strTmp);
strResult:=strResult+Chr(bytTmp Xor BTmp[i-1]);
j:=j+1;
end;
end;
end;
MagicReg.CloseKey;
MagicReg.Free;
FindScreenSaverPwd:=strResult;
end
 
可假如是另一个第三方屏保呢?
它若用自己的密码机制
又当如何?
 
TO vine
这段代码我怎么在电脑不能通过啊,
主要是其中有几个变量你没声明,再就是gStrToByte这个函数好像有问题,是不是你写
错了。!!
 
gStrToByte??
字符串 to Byte ?/

以下好象是VB的
http://www.csdn.net/magazine/source/scrpass.bas
 
怎么跟共享密码的破解差不多!关注!
 
是不是要解屏保的密码啊?????????????????????
 
我是想知道异或算法的具体方法,例如
79 xor 78, -> 1
DC xor DE, -> 2
45 xor 46, -> 3
29 xor 2D, -> 4
52 xor 57, -> 5
为什么会是这个结果,能给出具体运算步骤吗?
就算是二进制换算也是有步骤的啊。
 
异或是按位算的,若两个相异或的位相同,则结果为 1,若不同结果为 0
比如 2 和 7 异或:
2 的二进制表示: 0 0 1 0
7 的二进制表示: 0 1 1 1
-------------------------
0 1 0 1 (结果为 5)

第一位为 0 是因为 0 和 0 异或,它们相同,所以结果为 0
第二位为 1 是因为 0 和 1 异或,它们不同,所以结果为 1
依此类推,明白了吧。

另外,gStrToByte 估计是 StrToByte 吧,不过好像没有这个函数,
可以这样:Byte(StrToInt(strTmp));
 
TO beta
那么请问:
DC xor DE, -> 2
45 xor 46, -> 3
29 xor 2D, -> 4
中的DC、DE、2D等字母如何换算到二进制呢,是否要通过先换成十六进制的再换成二进制
的啊。
 
后退
顶部