0

他のユニットを使用しないように、いくつかの xor 暗号化コードを移植しようとしています。コンパイラでネイティブにサポートされているコマンド、変数、および型のみを使用したい。

たとえば、元のコードの一部を次に示します。

[...]
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;

このタスクにはどのようなヒントがありますか?

4

1 に答える 1

2

ライブラリ提供のユニットを使用しない唯一の理由は、学習演習です。ツールの組み込み機能の使用を拒否することで、意図的に自分自身を不自由にする理由は他にありません。ヒントの一般的な要求に対する回答は、学習経験を奪うことになります。

ほとんどの開発者は、キャリアのある時点で何かをゼロから書き直すことになります。ただし、極度の投資対象外症候群に苦しむ監督者によって課された場合を除き、ほとんどの場合、それは個人的な経験です。自分で仕事をするのと同じように、彼らの経験から利益を得ることはできません。自分でそれを行うことで、組み込みツールがどのような仕事をするのかを理解することができ、なぜそれらがそのように設計されているのかについての洞察が得られるかもしれません. 他の人からそのような説明を得ることができるかもしれませんが、実際に自分でやろうとしない限り、とにかく説明を本当に理解することはできません.

あなたへの私のヒントは、あなたのプロジェクトを進めることです。興味を持っていただければ幸いです。幸運を祈ります。最終的に前進できなくなった場合は、行き詰まっている具体的な問題を特定し、その障害について他の人に助けを求めてください。

于 2012-09-14T17:05:44.270 に答える