-1

プレーンテキストを暗号化するこの単純なコードを使用しました。次に、同じ暗号化方法を使用して復号化しようとしましたが、暗号化セクションで逆になりました。復号化コードでそれを逆にする方法がわからない乗算プロセスがあります。

コードは次のとおりです。

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
  count, ilength: Integer;
begin
  s := edit1.Text;
  ilength := Length(s);
  FOR count := 1 to ilength do
  begin
    s[count] := chr(ord(s[count]) * 4 + 1); // Encoding
  end;
  Label1.caption := s;
  // Display encoded text
  // Decoding section
  // This will probably be placed in another procedure.
  FOR count := 1 to ilength do
  begin
    s[count] := chr(ord((s[count]) / 4) - 1);
    // Here I Get An Error ! Please Help Guys, Thanks
  end;
end;
4

2 に答える 2

10

整数除算を実行しようとしています。Delphiでは、これを。で行いdivます。演算子は/浮動小数点除算用です。コードを見ると、この計算を逆にしようとしています。

ord(s[count]) * 4 + 1

あなたはこのようにそれを逆にします:

(ord(s[count]) - 1) div 4

ただし、アルゴリズムは機能しません。64と128を暗号化するとどうなるかを考えてみましょう。4を掛けると、それぞれ256と512になります。次に、1つ追加して257と513を取得します。次に、8ビットのデータ型に格納し直して、上位バイトを失います。したがって、両方の文字が値1にエンコードされます。

私はあなたが8ビットのテキストを使用していると仮定しています。ただし、16ビットテキストを使用している場合でも、アルゴリズムはまったく同じように失敗します。提案されたアルゴリズムは元に戻せません。

独自の暗号化アルゴリズムを作成するのではなく、既成の暗号化アルゴリズムを見つけることをお勧めします。暗号化を正しく行うのは困難です。

于 2012-12-26T15:57:21.173 に答える
5

あなたは/除算をするために使用しています。これは浮動小数点を返します。DIV代わりに整数を返すために使用します。

于 2012-12-26T15:57:09.383 に答える