使用另一个字符串生成32位字符串?

时间:2012-04-23 11:26:39

标签: java android string

我想在我的应用程序中使用另一个String生成一个32位字符串。 我怎么能这样做,我有一个像这样的字符串64459003-1a63-4b3b-b649-ffab8433806b。 我需要使用PassKey生成一个32位字符串,如字符串的密码。 我是新手请帮帮忙?

注意:我想要一个算法,如果稍后调用它可以重新生成相同的字符串吗?

我真正想要的: 我想从Android设备的UUID生成加密或某种类型的32Bit字符串并用它来激活我的应用程序。用户将发送技术支持生成的字符串和支持将发回激活ID以激活应用程序

2 个答案:

答案 0 :(得分:1)

  

是的,我希望它也可以逆转!

具有32位状态的字符串只能表示2^32个状态。但是为了使逆向转换起作用,你能够代表比这更多的状态。 (输入字符串看起来像128位UUID的字符串表示。这意味着2^128个不同的状态。)

您可以做的最好的事情是实现持久查找表。如果你有更多的2^32密钥,那么即使这样也会破坏。

答案 1 :(得分: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())。