0

アプリケーションで別の文字列を使用して 32 ビット文字列を生成したいと考えています。どうすればこれを行うことができますか、この 64459003-1a63-4b3b-b649-ffab8433806b のような文字列があります。文字列のパスワードのような PassKey を使用して 32 ビット文字列を生成する必要があります。私は初心者です助けてください?

注:後で呼び出された場合に同じ文字列を再生成できるアルゴリズムが必要ですか?

私が実際に望んでいること: Android デバイスの UUID から暗号化または何らかのタイプの 32 ビット文字列を生成し、それをアプリのアクティベーションに使用したいアプリをアクティブ化するための ID。

4

2 に答える 2

1

はい、私も逆にしたいです!

32 ビットの状態を持つ文字列は、状態のみを表すことができ2^32ます。しかし、逆変換が機能するためには、それよりもはるかに多くの状態を表現できる必要があります。(入力文字列は、128 ビット UUID の文字列表現のように見えます。これは、2^128異なる状態を意味します。)

あなたができる最善の方法は、永続的なルックアップ テーブルを実装することです。それ以上のパスキーがあると、それでも壊れ2^32ます。

于 2012-04-23T11:54:29.237 に答える
0

それでは、データベースにパスワードと前の文字列があると仮定します。Javaのランダムクラスを使用できます。
初期文字列を生成します:

//initially
Random rand=new Random();
byte[4] a=new byte[4];
rand.nextBytes(a);
//a will contain the 32 bit string
//store a in database
//Next time
Random b=new Random();
//convert tehe previous value to long
long value=0;
for(int i=0;i<b.length;i++)
 {
   value+=(b[i] & 0xff) <<(8*i);
   //System.out.println(Long.toString(value));
 }
b.setSeed(value);
//using this seed value generate a new random number
b.nextbytes(b);
//store this b to data base


注:データベースの別の列に初期値を格納する必要があります。ただし、後続の値は置き換えることができます。
元の文字列を取得するには、データベースを検索する必要があります。最初のシードから、残りの値を簡単に見つけることができます(setSeed()を呼び出すことによって)。

于 2012-04-23T12:03:10.910 に答える