私はC++の暗号化メソッドをC#に変換する作業をしています。問題は、希望どおりに暗号化/復号化できないことです。
アイデアは単純です。パケットをキャプチャして復号化します。出力は次のようになります。パケットサイズ-コマンド/アクション-ヌル(終了)
(復号化機能は最初と最後の2バイトを切り取ります)
C++コードは次のとおりです。
// Crypt the packet with Xor operator
void cryptPacket(char *packet)
{
unsigned short paksize=(*((unsigned short*)&packet[0])) - 2;
for(int i=2; i<paksize; i++)
{
packet[i] = 0x61 ^ packet[i];
}
}
したがって、ポインターを使用したくない場合は、C#でこれが機能すると思いました。
public static char[] CryptPacket(char[] packet)
{
ushort paksize = (ushort) (packet.Length - 2);
for(int i=2; i<paksize; i++)
{
packet[i] = (char) (0x61 ^ packet[i]);
}
return packet;
}
-しかし、そうではありません。返される値は、復号化された値ではなく、単なる別の行です。与えられる出力は次のとおりです:.. O♦&amp;/OOOe。
ええと..少なくとも「/」は何らかの理由で正しい場所にあります。
いくつかの詳細情報:
- 私が使用しているテストパケットは次のとおりです。
16進値:0C 00 E2 66 65 47 4E 09 04 13 65 00
プレーンテキスト:... feGN...e。
復号化:XX / hereXX
X =不明な値、私は本当に思い出せませんが、それは問題ではありません。
- Hex Workshopを使用すると、次の方法でパケットを復号化できます。
- 特殊16進値をCF_TEXTとして貼り付け、[16進値として扱う]チェックボックスがオンになっていることを確認します。
- その後、最初と最後の2バイトを除いて、貼り付けた16進値からすべてを選択します。
- [ツール]>[操作]>[Xor]に移動します。
- 「データを8ビットデータとして扱う」を選択し、値を「61」に設定します。
- 「OK」を押すと完了です。
これを頭のてっぺんから書いているので、現時点で提供できる情報はこれだけです。
お時間をいただきありがとうございます。
これに質問が表示されない場合:
誰かがコードを見て何が悪いのかを知ることができれば、あるいはそれを行う別の方法があるとしたら、それは素晴らしいことです。私はC++にひどいので、このコードを変換しています。そのコードを使用してC#アプリケーションを作成したいと思います。
追伸:コードタグなどが面倒だったので、少し間隔などがめちゃくちゃになってすみません。