请高手根据下面的要求给个算法,100分送上

iranjn 2005-09-01 07:23:14
要求:1,入口是一个数组,如array[1..400] of char 出口是一个数组如 array[1..400] of char
2,每个字节先异或0x9f,然后高4位,低四位交换顺序。
3,入口参数array[1..400] of char如果400字节的空间只用了100字节,那么剩下的300字节初值也加密
3,有加密和解密的算法。谢谢
...全文
130 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdzeng 2005-09-01
  • 打赏
  • 举报
回复
pfpf

((C and $f) shl 4) or (C shr 4)
这句写的好!
Eastunfail 2005-09-01
  • 打赏
  • 举报
回复
其实是一样的。D没有对ROL,ROR的直接支持,高低四位换位有点麻烦:
const DATA_SIZE=400;
type
TData=array[0..DATA_SIZE-1] of Char;
procedure Encrypt(const Input:TData;var Output:TData);
var i:Integer;C:Byte;
begin
for i:=Low(Input) to High(Input) do
begin
C:=Byte(Input[i]) xor $9f;
Output[i]:=Char(((C and $f) shl 4) or (C shr 4));
end;
end;
procedure Decrypt(const Input:TData;var Output:TData);
var i:Integer;C:Byte;
begin
for i:=Low(Input) to High(Input) do
begin
C:=Byte(Input[i]);
C:=((C and $f) shl 4) or (C shr 4);
Output[i]:=Char(C xor $9f);
end;
end;
iranjn 2005-09-01
  • 打赏
  • 举报
回复
大哥我要delphi 的
fffddd 2005-09-01
  • 打赏
  • 举报
回复
厉害,我一直都很佩服会汇编的人。
Eastunfail 2005-09-01
  • 打赏
  • 举报
回复
const DATA_SIZE=400;
type
TData=array[0..DATA_SIZE-1] of char;
procedure Encrypt(var Input:TData;var Output:TData);
asm
mov ecx,DATA_SIZE
mov esi,Input
mov edi,Output
@next:
mov al,[esi+ecx-1]
xor al,$9f
rol al,4
mov [edi+ecx-1],al
loop @next
ret
end;
procedure Decrypt(var Input:TData;var Output:TData);
asm
mov ecx,DATA_SIZE
mov esi,Input
mov edi,Output
@next:
mov al,[esi+ecx-1]
rol al,4
xor al,$9f
mov [edi+ecx-1],al
loop @next
ret
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧