我正在尝试移植some xor-encryption code,因此它不使用任何其他单位。我想只使用编译器原生支持的命令,变量和类型。
例如,这里有一些原始代码:
[...]
while (StreamIn.Position < StreamIn.Size) and
((StreamIn.Size -StreamIn.Position) >= szBuffer) do begin
(* read 4 bytes at a time into a local integer variable *)
StreamIn.ReadBuffer(buffer, szBuffer);
(* the XOR encryption/decryption *)
buffer := buffer xor theKey;
buffer := buffer xor $E0F;
(* write data to output stream *)
StreamOut.WriteBuffer(buffer, szBuffer);
end;
[...]
这是我的代码:
function __NativeEncrypt (const Key, Source : String) : String;
// this function should not be used directly
// use EncryptText and DecryptText
const
szBuffer = SizeOf(Integer); (* 4 bytes *)
szByteBuffer = SizeOf(Byte); (* 1 byte *)
var
byteBuffer,
buffer,
index,
theKey: Integer;
StreamIn : String;
StreamOut : String;
i : Integer;
begin
theKey := hashKey(Key);
StreamIn := Source;
StreamOut := '';
for i := 1 to Length (StreamIn) do begin
buffer := Integer(StreamIn[i]);
buffer := buffer xor thekey;
buffer := buffer xor $E0F;
StreamOut := StreamOut + char(Buffer);
end;
result := StreamOut; // wrong results.
// to continue...
end;
这项任务有哪些提示?
答案 0 :(得分:2)
不使用图书馆提供的单位的唯一原因是学习练习。我认为没有其他理由通过拒绝使用工具的内置功能来故意削弱自己。您对提示的一般要求的任何答案都会让您失去学习经验。
大多数开发人员最终会在职业生涯的某个阶段从头开始重写某些内容。然而,除非是由一位患有极度非投资性综合症的主管强加的,否则它几乎总是一种个人经历。你不会以自己的工作方式从自己的工作中获益。自己动手将让您了解内置工具的工作内容,并可以让您深入了解它们的设计原因。虽然你可能能够从其他人那里获得这些解释,除非你真的试图自己做,否则你不会真正理解这些解释。
我的建议是继续你的项目。我希望你觉得它很有意思,祝你好运。如果您最终发现自己无法取得进一步进展,那么请确定您遇到的具体问题,然后向其他人寻求有关该障碍的帮助。