我正在嘗試取uuid
並將其轉換回其生成的字節。將UUID轉換爲字節
我一直在研究SecureRandom
源,看看我是否可以將UUID反向工程化成字節,但是我很難用它。
我需要做的基本上是這樣的逆:
def self.uuid
ary = self.random_bytes(16).unpack("NnnnnN")
ary[2] = (ary[2] & 0x0fff) | 0x4000
ary[3] = (ary[3] & 0x3fff) | 0x8000
"%08x-%04x-%04x-%04x-%04x%08x" % ary
end
所以我有這樣的UUID:
"4b6d2066-78ac-49db-b8c4-9f58d8e8842f"
這開始了與此字符串的字節:
"Km fx\xAC\xC9\xDB\xF8\xC4\x9FX\xD8\xE8\x84/"
這是什麼軟件包:
[
[0] 1265442918,
[1] 30892,
[2] 51675,
[3] 63684,
[4] 40792,
[5] 3639116847
]
這ary[2]
後ary[3]
在修改過的
[
[0] 1265442918,
[1] 30892,
[2] 18907,
[3] 47300,
[4] 40792,
[5] 3639116847
]
所以我原來的UUID分裂背出到其未連接的部分:
[
[0] "4b6d2066",
[1] "78ac",
[2] "49db",
[3] "b8c4",
[4] "9f58",
[5] "d8e8842f"
]
我遇到的問題是我」我不知道這兩條線的倒數是什麼:
ary[2] = (ary[2] & 0x0fff) | 0x4000
ary[3] = (ary[3] & 0x3fff) | 0x8000
而且我也不確定如何將其餘元素恢復爲其整數值。我確定它是某種形式的pack
或unpack
,但我不確定它需要什麼。
按位'或'(以及'和')不是revertable,雖然。看看:'ruby -e'放置「#{0x4000 | 0x4000}與#{0x0000 | 0x4000}''#⇒16384與16384'。 – mudasobwa