2012-04-03 25 views
7

Mam reprezentację ciągów skrótu szesnastkowego MD5 dla pliku, który chcę przekonwertować na base64, aby użyć nagłówka HTTP Content-MD5 podczas przesyłania. Czy istnieje bardziej przejrzysty lub skuteczniejszy mechanizm niż następujący?Konwersja heksadecymalnego skrótu do base64 w Rubim

def hex_to_base64_digest(hexdigest) 
    [[hexdigest].pack("H*")].pack("m").strip 
end 

hex_digest = "65a8e27d8879283831b664bd8b7f0ad4" 
expected_base64_digest = "ZajifYh5KDgxtmS9i38K1A==" 

raise "Does not match" unless hex_to_base64_digest(hex_digest) === expected_base64_digest 
+0

Wygląda całkiem jasno i skutecznie. Jedyną rzeczą, która może być szybsza/klarowniejsza, jest rodzimy hak, który wykonuje dokładnie metodę "hex_to_base64_digest". – maerics

Odpowiedz

17

Wydaje się całkiem jasne i skuteczne dla mnie. Możesz zapisać wywołanie, aby odebrać taśmę, określając liczbę 0 dla formatu "m". (if count is 0, no line feed are added, see RFC 4648)

def hex_to_base64_digest(hexdigest) 
    [[hexdigest].pack("H*")].pack("m0") 
end 
+0

Dzięki, wygląda na to, że tak może być. Wydaje się, że zawijanie każdego parametru w tablicy jest nieporządne. – steveh7