delphi 2010 下的一个字符串加密函数,可对中文进行加/解密
2011-06-17 17:31
357 查看
function Crypt(s: String; const bEncrypt: boolean = True): String; //加、解密
const
mm=7;
key:array[0..mm] of word=($A2,$F9,$AA,$55,$E3,$6D,$8A,$47);
//这里的常量是加密异或码(作为加密密钥用的),可自行修改。
var
i, L : DWord;
b, k : word;
begin
Result := '';
L:=Length(S);
if L<1 then exit;
k:=0;
if bEncrypt then
//加密
for i := 1 to L do begin
b := word(S[i]) xor key[k];
Result := Result + IntToHex(b,4);
inc(k);
if k>mm then k:=0;
end
else begin
//还原
k:=0;
i:=0;
while i<L div 4 do begin
Result := Result + chr( StrToInt('$'+copy(s,i*4+1,4)) xor key[k]);
inc(i);
inc(k);
if k>mm then k:=0;
end;
end;
end;
//说明:1个字符转为4个16进制数字.因为会出现不可见字符,如果不使用16进制数字表示,会出现还原问题.另外,因delphi2010将汉字认作是一个字符,所以用4个16进制数字表示加密后的字符.如果仅仅是加密英文用2个16进制数字就可以了.不提供bEncrypt参数则为加密.
const
mm=7;
key:array[0..mm] of word=($A2,$F9,$AA,$55,$E3,$6D,$8A,$47);
//这里的常量是加密异或码(作为加密密钥用的),可自行修改。
var
i, L : DWord;
b, k : word;
begin
Result := '';
L:=Length(S);
if L<1 then exit;
k:=0;
if bEncrypt then
//加密
for i := 1 to L do begin
b := word(S[i]) xor key[k];
Result := Result + IntToHex(b,4);
inc(k);
if k>mm then k:=0;
end
else begin
//还原
k:=0;
i:=0;
while i<L div 4 do begin
Result := Result + chr( StrToInt('$'+copy(s,i*4+1,4)) xor key[k]);
inc(i);
inc(k);
if k>mm then k:=0;
end;
end;
end;
//说明:1个字符转为4个16进制数字.因为会出现不可见字符,如果不使用16进制数字表示,会出现还原问题.另外,因delphi2010将汉字认作是一个字符,所以用4个16进制数字表示加密后的字符.如果仅仅是加密英文用2个16进制数字就可以了.不提供bEncrypt参数则为加密.
相关文章推荐
- Visual Studio 2010中文暂时无法进行Silverlight 4的开发
- 一个最简单的Delphi2010的PNG异形窗口方法
- php关于使用iconv(...)函数对字符进行中文转换时,遇到的一个问题
- 转载--Delphi 2010下使用sqlitesimpledelphi连接SQLite数据库及中文乱码问题的解决
- Delphi编译常见错误中文手册 Delphi 2010
- Delphi程序员如何找到高薪的工作?(赚不到钱,原因只有一个,就是他们没有被公司录取。Delphi必须要独自进行深入研究,才能精通,同时也不能自由性太强)
- 在 Delphi 中判断一个字符是中文的方法
- Cocos2d-x程序Windows下VC中文乱码的解决(用MultiByteToWideChar进行转换,VC2010有非常厉害的execution_character_set)
- lucene使用IKAnalyzer3.2.5中文分词器进行索引的一个小例子
- 一个最简单的Delphi2010的PNG异形窗口方法
- 一个最简单的Delphi2010的PNG异形窗口方法
- (2356)Delphi 2010下使用sqlitesimpledelphi连接SQLite数据库及中文乱码问题的解决
- 每日程炼-delphi2010 Rtti获取某一个类的信息
- delphi2010发送邮件—中文显示为乱码解决
- Delphi中如何进行HTTP编程,比如:发送一个XML文件给服务器?
- 一个最简单的Delphi2010的PNG异形窗口方法
- 在 Delphi 中判断一个字符是中文的方法
- 将字符串按照指定的长度进行分割(一个中文视为两个字符)
- delphi2010发送邮件—中文显示为乱码解决
- delphi7-》delphi2010 中文乱码