0

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

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

我真正想要的:我想从 android 设备的 UUID 生成一个加密或某种类型的 32 位字符串,并将其用于激活我的应用程序。用户将向技术支持发送生成的字符串,支持将发回激活激活应用程序的 ID。

4

2 回答 2

1

是的,我也希望它反转!

具有 32 位状态的 String 只能表示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 回答