2012-04-03 9 views
7

Ho una rappresentazione di stringa di un digest esadecimale MD5 per un file, che voglio convertire in base64 per utilizzare l'intestazione HTTP Content-MD5 al momento del caricamento. C'è un meccanismo più chiaro o più efficiente da fare rispetto al seguente?Conversione di un riassunto esadecimale in base64 in Ruby

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

sembra piuttosto chiara ed efficace per me. L'unica cosa che potrebbe essere più veloce/più chiara è un hook nativo che esegue esattamente il metodo "hex_to_base64_digest". – maerics

risposta

17

Sembra abbastanza chiaro ed efficiente per me. È possibile salvare la chiamata a nudo specificando 0 conteggio per il formato pack '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

Grazie, sembra che potrebbe essere il caso. Sembra solo che il wrapping di ogni parametro dell'array sia disordinato. – steveh7