字符串加密(50分)

  • 主题发起人 主题发起人 masm
  • 开始时间 开始时间
M

masm

Unregistered / Unconfirmed
GUEST, unregistred user!
我们在写程序的时候都要显示一些信息,这些字符串事先都写在最终的EXE中,如果不加保护,用个最简陋的二进制修改工具就可以改的面目全非,所以有必要进行加密。为了追求效率,我想用汇编(dos下我玩过很多花样,强度一般就可以),问题是你写程序的时候,那些字符串要赋值,而所赋的值是加密后的,都是乱码,还有可能是回车、换行等等控制符,该怎么办?
我有一个初步想法:
字符串在另外一个文本文件中,用加密函数进行加密,然后程序去读这个文本文件,解密后显示字符串。缺点:字符串不在EXE文件中,需要另外携带一个文件。
请富翁们交流。
 
我做了一个字符串加密解密的函数,(强度?知道算法就没有强度),
加密后还是字符串 Ascii($21..$7e) -> Ascii($21..$7e)
function SecuText(const T: ShortString
Key: Integer): ShortString;
var R: ShortString;
I, L: Integer;
N: array[1..255] of Integer;
begin
R := '';
L := Length(T);
if L < 2 then Result := T else
begin
for I := 1 to L do N := Byte(T) - 32;
N[L] := (N[L] + Key) mod 95;
N[1] := (N[L] + N[1]) mod 95;
for I := 2 to L do N:=(Key + N[I - 1] + N) mod 95;
for I := 1 to L do
begin
R := R + Char(32 + N);
end;
Result := R;
end;
end;

function OpenText(const T: ShortString
Key: Integer): ShortString;
var
R: ShortString;
I, L: Integer;
N: array [1..255] of Integer;
begin
R := '';
L := Length(T);
if L < 2 then Result := T else
begin
for I := 1 to L do N := Byte(T) - 32;
for I := L downto 2 do N := (N + 95 - Key + 95 - N[I - 1]) mod 95;
N[1] := (N[1] + (95 - N[L])) mod 95;
N[L] := (N[L] + (95 - Key)) mod 95;
for I := 1 to L do R := R + Char(N + 32);
Result := R;
end;
end;
 
汉字呢?
 
我当时是考虑加密一个登陆ID,口令,没考虑汉字,甚至空格也不行
 
我看过dfw以前的贴子,贴的各种字符串加密的方法好象都有问题,对于回车、换行等控制符处理不好,如果用户输入的内容不能还原,麻烦就大了,所以在此发贴看看有没有好的算法
 
要么还是用我DOS汇编的老办法?就是字符串不用s:='abcdefg'这种方式,而是采用汇编的
s db 4eh,5fh,67h,0h这样构造出一个string。避开加密后要复制粘贴那些乱码和回车换行这些“惹事生非”的控制符。
 
你就是想知道字符串怎样赋值吧,这样:
s := #13#10;
s := #$d#$a;
 
(ord(x)+47) mod 256
 
你就是想知道字符串怎样赋值吧,这样:
s := #13#10;
s := #$d#$a

=============================================
汉字呢?
 
?
这样可以达到用汇编一样的效果啊,比如
s db 4eh,5fh,67h,0h
就用
s := #$4e#$5f#$67#$0;
怎会不能表示汉字呢?
 
找个MD5的加密算法,网上有delphi现成的算法!!
 
MD5现在太流行,破解的就十分easy了,一般MD5都是初始加密了,怎么还用它来进行整个加密呢?
 
后退
顶部