我想在我的应用程序中使用另一个String生成一个32位字符串。 我怎么能这样做,我有一个像这样的字符串64459003-1a63-4b3b-b649-ffab8433806b。 我需要使用PassKey生成一个32位字符串,如字符串的密码。 我是新手请帮帮忙?
注意:我想要一个算法,如果稍后调用它可以重新生成相同的字符串吗?
我真正想要的: 我想从Android设备的UUID生成加密或某种类型的32Bit字符串并用它来激活我的应用程序。用户将发送技术支持生成的字符串和支持将发回激活ID以激活应用程序
答案 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())。