簡體   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