关于异或运算加密,请教……[关于16进制转十进制] (50分)

  • 主题发起人 主题发起人 ili
  • 开始时间 开始时间
I

ili

Unregistered / Unconfirmed
GUEST, unregistred user!
我看到有些加密形式是:用异或运算。如Access加密。
请问,我怎么做异或加密?怎么弄出16进制?

10->16:IntToHex,那么16->10的函数呢?我找不到:(
 
>>怎么做异或加密?
Please look at:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=529506
http://www.delphibbs.com/delphibbs/dispq.asp?lid=637914

>>怎么弄出16进制?
See Delphi Help about IntToHex.(This is Int to Hex) ( Hex->Int: StrToInt('$52') )
 
creation-zy大哥,呵呵,你在Xor一下子就拿130分啊:)

我想知道,Xor加密的原理?
 
二进制数字进行异或逻辑运算:
0 xor 0=0 1 xor 1=0 0 xor 1=1 1 xor 0=1
可以发现,如果对一组二进制数据进行一次xor运算,可以达到加密的效果,若对加密后的
数据再次进行同样的xor运算,就会变回原来的数据。
明文 S 密钥 K 密文 E (注意:密钥的长度应该和被加密的明文一样)
0101 xor 1001 => 1100 1100 xor 1001 => 0101
只要你有密钥,就可以对二进制数据进行加/解密。

http://www.delphibbs.com/delphibbs/dispq.asp?lid=646310
 
再举个例子,可能有点土 :)

function encode(License:string):string;
var str,sNum:string
number:dword
byte,byte1:array[1..4]of dword;
inChar:array[1..3]of char;
begin
str:=license;
delete(str,1,1);
delete(str,2,1);
delete(str,3,1);
delete(str,6,1);
number:=strtoint64(str);
number:=not number;
number:=number xor $1972154980;
byte[1]:=(number and $0ff000000) shr 24;
byte[2]:=(number and $0ff0000) shr 16;
byte[3]:=(number and $0ff00) shr 8;
byte[4]:=(number and $0ff);

byte1[1]:=((byte[1]and $0c0)+(byte[2]and $0c0)shr 2)+((byte[3]and $0c0)shr 4)+((byte[4]and $0c0)shr 6);
byte1[2]:=((byte[1]and $30)shl 2)+(byte[2]and $30)+((byte[3]and $30)shr 2)+((byte[4]and $30)shr 4);
byte1[3]:=((byte[1]and $0c)shl 4)+((byte[2]and $0c)shl 2)+(byte[3]and $0c)+((byte[4]and $0c)shr 2);
byte1[4]:=((byte[1]and $03)shl 6)+((byte[2]and $03)shl 4)+((byte[3]and $03)shl 2)+(byte[4]and $03);
number:=((byte1[1])shl 24)+((byte1[2])shl 16)
+((byte1[3])shl 8)+(byte1[4]);

byte[1]:=((number and $0ff000000)shr 24);//右移24位
byte[2]:=((number and $0ff0000)shr 16);
byte[3]:=((number and $0ff00)shr 8);
byte[4]:=(number and $0ff);

byte[1]:=(((byte[1] and $f0))shr 4)+(((byte[1] and $0f))shl 4);
byte[2]:=(((byte[2] and $f0))shr 4)+(((byte[2] and $0f))shl 4);
byte[3]:=(((byte[3] and $f0))shr 4)+(((byte[3] and $0f))shl 4);
byte[4]:=(((byte[4] and $f0))shr 4)+(((byte[4] and $0f))shl 4);

number:=((byte[2])shl 24)+((byte[1])shl 16)
+((byte[4])shl 8)+(byte[3]);

sNum:=inttostr(Number);
inChar[1]:=char(((integer(sNum[1])+integer(sNum[2]))mod 5)+integer('a'));
inChar[2]:=char(((integer(sNum[3])+integer(sNum[4]))mod 5)+integer('a'));
inChar[3]:=char(((integer(sNum[5])+integer(sNum[6]))mod 5)+integer('a'));
insert(inChar[1],sNum,1);
insert(inChar[2],sNum,5);
insert(inChar[3],sNum,9);
result:=sNum;

end;
 
还有两个问题:
1:Shr和Shl是怎么运算的?E文看不懂:(
2:Reg.OpenKey('/SOFTWARE/Dawning/iFORM/RegInfo/', False)

Reg.OpenKey('/SOFTWARE/Dawning/iFORM/RegInfo', False)
的区别在哪里?以前在help看过,会用,现在给忘了。
 
shl就是左移一位。比如 000000001 变成 000000010
shr是右移。
 
10->16:IntToHex,那么16->10的函数呢?我找不到:(
 
天哪!
( Hex->Int: StrToInt('$52') )

Str:='10'
//Hex String
i:=StrToInt('$'+Str)
//i -> $10 -> 16

看书,看书,再看书! 不看书的话问题无穷无尽,别人想帮忙都来不及。
 
非常感谢creation-zy大哥!书我在看,不过没看到过这些问题~~~以后一定努力学习:)
 

Similar threads

回复
0
查看
848
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部