繁体   English   中英

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

[英]Generate a 32bit String using another String?

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

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

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

是的,我也希望它能逆转!

状态为32位的字符串只能表示2^32个状态。 但是为了使反向转换起作用,您必须能够表现出更多的状态。 (输入字符串看起来像是128位UUID的String表示形式。这意味着2^128不同的状态。)

您能做的最好的事情就是实现一个持久的查找表。 如果您拥有2^32通行键,即使那样也将中断。

好的,那么假设您将拥有数据库中的密码和上一个字符串。 您可以使用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())。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM