Z
zhyan2001
Unregistered / Unconfirmed
GUEST, unregistred user!
问题应该不难,可结果总是不太对。我想对一幅图采用简单的异或运算加密,方法是对
每一象素与随机产生的整数做异或,然后再把密图与产生的整数异或得到原图。
a:=random(16777215);
b:=random(16777215);
for i:=0 to width-1 do
for j:=0 to hight-1 do
begin
Canvas.Pixels[i,j]:=Canvas.Pixels[i,j] xor (x[(a*i+b*j) mod di]);
end;
for i:=0 to width-1 do
for j:=0 to hight-1 do
begin
Canvas.Pixels[i,j]:=Canvas.Pixels[i,j] xor (x[(a*i+b*j) mod di]);
end;
得到的图上有很多麻点,我循环了4次,麻点更多。
另外我还采用了分别对RGB分量异或后再合成的办法,得到的图像更糟,象原图的水彩画。
for i:=0 to wj-1 do
for j:=0 to hi-1 do
begin
k[hi*i+j]:=Canvas.Pixels[i,j];
blue[hi*i+j]:=getbvalue(k[hi*i+j]);
blue[hi*i+j]:=blue[hi*i+j] xor e;
green[hi*i+j]:=getgvalue(k[hi*j+i]);
green[hi*i+j]:=green[hi*i+j] xor e;
red[hi*i+j]:=getrvalue(k[hi*i+j]);
red[hi*i+j]:=red[hi*i+j] xor e;
Canvas.Pixels[i,j]:=rgb(red[hi*i+j],green[hi*i+j],blue[hi*i+j]);
end;
谁能帮帮我!
每一象素与随机产生的整数做异或,然后再把密图与产生的整数异或得到原图。
a:=random(16777215);
b:=random(16777215);
for i:=0 to width-1 do
for j:=0 to hight-1 do
begin
Canvas.Pixels[i,j]:=Canvas.Pixels[i,j] xor (x[(a*i+b*j) mod di]);
end;
for i:=0 to width-1 do
for j:=0 to hight-1 do
begin
Canvas.Pixels[i,j]:=Canvas.Pixels[i,j] xor (x[(a*i+b*j) mod di]);
end;
得到的图上有很多麻点,我循环了4次,麻点更多。
另外我还采用了分别对RGB分量异或后再合成的办法,得到的图像更糟,象原图的水彩画。
for i:=0 to wj-1 do
for j:=0 to hi-1 do
begin
k[hi*i+j]:=Canvas.Pixels[i,j];
blue[hi*i+j]:=getbvalue(k[hi*i+j]);
blue[hi*i+j]:=blue[hi*i+j] xor e;
green[hi*i+j]:=getgvalue(k[hi*j+i]);
green[hi*i+j]:=green[hi*i+j] xor e;
red[hi*i+j]:=getrvalue(k[hi*i+j]);
red[hi*i+j]:=red[hi*i+j] xor e;
Canvas.Pixels[i,j]:=rgb(red[hi*i+j],green[hi*i+j],blue[hi*i+j]);
end;
谁能帮帮我!