回答
您可以查看Uuid的版本,但只有在確定Uuid有效時才能信任該版本(請參閱http://tools.ietf.org/html/rfc4122)。該版本會告訴你你有什麼樣的Uuid,並用它來提取特定的信息。
不一定是一種可靠的方式,因爲根據UUID的種類,它可能完全由隨機位生成,或者是基於時間戳的,或者基於MAC地址。所以你可能會得到一些信息,但你不能保證你能得到任何東西。
對此的官方參考是RFC 4122,它應該可能會爲您提供足夠的信息來提取數據,儘管您可能不應該過度依賴它。
如果是版本1的UUID,則MAC地址將是最後十二個十六進制數字。
但是,確定任意UUID格式的字節塊是否實際上是版本1 UUID或只是隨機數據的方式並不一定可靠。所以充其量你必須把你的MAC地址拿回來。 – 2009-11-10 17:19:28
@DanielPryden假設正在遵循標準,UUID中包含UUID版本號。 v1 UUID始終爲xxxxxxxx-xxxx-1xxx-xxxx-xxxxxxxxxxxx。見https://en.wikipedia.org/wiki/Universally_unique_identifier#Format – YeB 2018-01-12 15:26:57
@YeB:你說的沒錯。但我的觀點是:如果你看到*看起來像是一個UUID的字節塊,你不能確定它*是一個UUID,因此版本字段不一定是可靠的。也就是說:如果您嘗試從UUID中提取數據,則需要注意攻擊者可能預先確定其發送的位,而與標準所說的內容無關。這意味着,正如我八年多前所說的那樣:「充其量,你最好不得不把MAC地址拿回來」。 – 2018-01-12 15:57:46
甲符合標準的UUID可以是幾種變體之一,它看起來像這樣:
AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF
的DDDD部分的第一(十六進制)位確定變種。
如果它是8,9中的一個,A,B它符合當前規範 (0-7保留用於向後兼容,C,D保留給Microsoft,並且E,F保留給未來使用)
如果它符合當前規範,檢查其確定UUID版本的CCCC部分的第一個數字:
- 基於時間具有獨特的或隨機的主機標識符(MAC)
- DCE安全版本(帶有POSIX UID)
- 基於名稱(MD5散列) 隨機
- 基於名稱(SHA-1散列)
版本4被簡單地隨機選擇。
版本3和5是通過哈希生成的,並丟掉了一些位,這意味着您基本沒有機會從中恢復任何信息。有關如何構建它的詳細信息可在RFC4122或UUID Generator webpage中找到。
我找不到任何版本2的UUID,所以我沒有檢查如何提取數據。
版本1由時間戳和當前主機MAC地址生成。 (如果您設置了MAC地址的「廣播/多播」位,標準還允許使用隨機地址。)
下面的Perl文檔片斷從版本1的UUID解析MAC地址和時間:
my $uuid="AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF";
$uuid=~tr/-//d;
my $time_low=hex substr($uuid,2* 0,2*4);
my $time_mid=hex substr($uuid,2* 4,2*2);
my $version =hex substr($uuid,2* 6,1);
my $time_hi =hex substr($uuid,2* 6+1,2*2-1);
my $time=($time_hi*(2**16)+$time_mid)*(2**32)+$time_low;
my $epoc=int($time /10000000) - 12219292800;
my $nano=$time-int($time/10000000)*10000000;
my $clk_hi =hex substr($uuid,2* 8,2*1);
my $clk_lo =hex substr($uuid,2* 9,2*1);
my $node =substr($uuid,2*10,2*6);
$node=~/^(..)(..)(..)(..)(..)(..)$/ || die;
$node="$1:$2:$3:$4:$5:$6";
print "time: ",scalar localtime $epoc," +",$nano/10000,"ms\n";
print "clock id: ",$clk_hi*256+$clk_lo,"\n";
print "Mac: $node\n";
my $byte=hex $1;
if(hex($1)&1){
print "broadcast/multicast bit set.\n";
};
最後但並非最不重要的,有幾個指定的UUID,例如用於GPT partitions。
您在第二行代碼中有一個錯誤。它應該是: $ uuid =〜s/- // g; 否則,該腳本將只會替換第一次出現的' - '。除此之外,感謝您分享此代碼。 – metator 2013-10-03 16:35:08
@metator:第二行可能意味着音譯刪除所有短劃線:'-'。在Perl 5.18中正確的代碼是'$ uuid =〜tr/- // d;'(相當於Unix命令'tr -d -')。同樣,每行都縮進四個空格,這在複製代碼時很煩人。 – pabouk 2014-11-25 14:50:00
我在RFC 4412中沒有看到任何建議你對變體編碼的解釋是正確的。它只用三位來確定變體,而不是一個整數。 – Melab 2016-08-13 18:06:31
我知道我們可以很容易地提取uuid版本號。有沒有可靠的方法來提取信息,如時間戳,MAC地址?
是的,是的;如果UUID是版本1或版本2(如RFC 4122中所述)。還有一個備用(非RFC 4122)版本4,被稱爲「COMB」,其中包含可以解析的時間戳(以及隨機值),並且可以顯示創建日期/時間。
獎勵:Mahonri Moriancumer的UUID and GUID Generator and Forensics。
OSSP uuid tool可以解碼所有版本的UUID。在基於Debian的Linux系統上,您可以使用apt-get install uuid
進行安裝;對於其他發行版,軟件包名稱可能會有所不同。
要解碼UUID,使用-d
(解碼)標誌:
uuid -d AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF
對於版本1點的UUID,這給MAC地址和時間戳 - 因爲那是什麼在V1 UUID。
- 1. 我們可以從博客或論壇中爲Web抓取項目提取什麼樣的數據?
- 2. 爲什麼不是這樣從7天內提取數據?
- 3. 用BeauitfulSoup提取文本後,我可以用提取的數據做什麼?
- 4. 您爲R中的Sankey圖輸入了什麼樣的數據?
- 5. 什麼正則表達式可以從HTML中提取URL?
- 6. 從jmeter響應中提取UUID
- 7. IronPython - 什麼樣的數據庫可用
- 8. 核心數據提取返回什麼樣的錯誤?
- 9. 有什麼地方可以在線提供您的代碼嗎?
- 10. 什麼是您可以從JavaScript文件中讀取最簡單的方法?
- 11. 我可以從多維數組中提取特定數據
- 12. 我可以從PHP中的站點提取數據嗎?
- 13. 我可以從樣式表中只提取使用的CSS嗎?
- 14. 從PDF中提取數據的最簡單方法是什麼?
- 15. 什麼樣的數據類型可以四捨五入?
- 16. 什麼樣的數據結構可以實現並行處理
- 17. 使用glTexImage2D可以達到什麼樣的數據速率?
- 18. 如果您可以直接從AttributeSet中讀取,爲什麼需要declare-styleable?
- 19. 您可以推薦什麼JavaScript緩存
- 20. 您可以從excel中的引用的相鄰列中提取內容嗎?
- 21. 從數據庫中提取數據以獲取C3js圖表
- 22. 我可以從數據庫分頁中獲得什麼性能提升?
- 23. BIRT可以從SQL Server中提取數據嗎?
- 24. 是否可以從Facebook頁面中提取數據?
- 25. 您可以從Scikit-learn RandomForestClassifier中提取評分算法,並將負載係數提取到Oracle中?
- 26. 爲什麼你可以從已經關閉的ByteArrayOutputStream中讀取數據?
- 27. 爲什麼addAll清除ArrayList從中提取數據?
- 28. 數據從Spark中的RDDs以什麼順序獲取進程?
- 29. 您可以在數據綁定的WPF樣式中執行「數學」
- 30. 什麼正則表達式可以提取我需要的數據?
你問的是什麼UUID的味道,以及什麼語言?如果沒有這些信息,我會說你必須知道如何生成UUID(版本)才能知道可以提取哪些內容。 – 2015-11-24 19:27:31