2012-04-23 4 views
0

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

注:後で呼び出すと同じ文字列を再生成するアルゴリズムが必要ですか?

私が実際に望むもの: アンドロイドデバイスのUUIDから暗号化された、またはある種の32Bit文字列を生成し、それを私のアプリケーションのアクティブ化に使用したいと思います。ユーザーは技術サポートに生成された文字列とサポートを送信しますアプリをアクティブ化するためにアクティベーションIDを送り返します。

+0

「後で呼び出された場合に同じ文字列を再生成する」とはどういう意味ですか? – Ashwin

+1

32ビット文字列とはどういう意味ですか? – MByD

+1

あなたは** code + passkey = 32_bit_string **を必要としますか?プロセスを元に戻したいと思っていますか? – lynks

答えて

1

はい私はそれも逆にしたい!

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

あなたができることは、永続ルックアップテーブルを実装することです。さらに、2^32個のパスキーがあればそれは壊れます。

+0

はい、それはUUIDですが、私はUが書いたものを手に入れませんでした。私は今のところnoobです! – Navdroid

+0

@Navdroid、それは変数が小さすぎてあなたが入れようとしているデータを保持できないことを意味します。しかし、余分なデータベースと40億人未満のユーザーがいる場合は、その問題を回避することができます。 –

+0

率直に言って、これは少しハーフベークしたようです。ソリューションの漠然とした考え方と問題を混同するのではなく、実際に達成しようとしていることを説明してください。 –

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 


注:あなたがAA別々の列にdatabse valuein初期を保存する必要があります
は、最初の文字列を生成します。しかし、その後の値は置き換えることができます。
オリジナル文字列を検索するには、データベースを検索する必要があります。最初のシードから、残りの値を簡単に見つけることができます(setSeed()を呼び出すことによって)。

+0

実際にこのコードは大丈夫ですが、私はDBに格納したくありません。私は1番目の文字列を他の文字列STRからのパスキーを生成し、再びアプリケーションに依存しないSTRに変換することができます。 – Navdroid

+0

@Navdroid:あなたが達成しようとしていることを言ったなら、助けになるでしょう。 – Ashwin

関連する問題