-3

私は署名されていない文字列を持っています(ここでは16進数で: d3 ea 12 f7 f7 )。この文字列は、どういうわけか整数 37224 に変換されます。変換の手順を知りたいです。

int であるため、int は 4 バイトの長さで、この文字列は 5 バイトであるため、おそらく文字列に 1 つの文字が多すぎることを知っているだけです。最初のバイトまたは最後のバイトを破棄する必要がある可能性が非常に高いです。

暗号化されているか、バイトがシフトされているか、そのようなものですか?

変換の手順を見つける方法について何か考えはありますか?

16 進数の unsigned char 文字列: d3 ea 12 f7 f7

int に変換: 37224

4

1 に答える 1

3

私のコメントについて少し詳しく説明します。

変換の手順をどのように見つけることができるかについてのアイデアはありますか?

できません。推測することも、任意に割り当てることもできますが、変換を確実に知ることはできません。単一の出力と単一の入力は無意味です。関数が次のようになっていると仮定した方がよいでしょう。

if (in == 37224) { return "d3 ea 12 f7 f7"; }

これらの2つの値が相互にマッピングされるように、無限に多くの関数があります。「正しい」機能を探すことはできません。コメントで言ったように、関数を推測することができ、ある種の意味のあるパターンを見つけることができれば、おそらくそれが正しいと推測することができます。明らかなパターンが見られたとしても、サンプルサイズが1の場合、それは危険な関数になる可能性があります。

このように考えてください:

f(2) = 4

関数の逆関数は何fですか?あなたは推測することができf^-1(x) = x/2ます。f^-1(x) = log2(x)ただし、 (基本的にまたはのいずれf(x) = 2xか)の場合もありますf(x) = 2^x

同じ考えがここにも当てはまります。正しい逆関数が見つかったと想定できますが、確実に知ることはできません。

g(y)f(x)は、 fの定義域内のすべてのxについて、g(f(x))=xの場合の逆です。

xの1つの値について、g(f(x))= xであることを知っていても、それが。g(y)の逆であることを証明するものではありませんf(x)。(それが実際に逆であるという信仰の飛躍を喜んで受けない限り、それは実際には[との共通部分である以外は]g基本的に無意味な知識です。)f

于 2012-05-18T10:17:57.570 に答える