2012-04-03 47 views
7

Tôi có một biểu diễn chuỗi của thông báo hex MD5 cho một tệp, mà tôi muốn chuyển đổi thành base64 để sử dụng tiêu đề HTTP Content-MD5 khi tải lên. Có một cơ chế rõ ràng hơn hoặc hiệu quả hơn để làm hơn những điều sau đây không?Chuyển đổi một thông số thập lục phân thành base64 trong 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

Trông khá rõ ràng và hiệu quả với tôi. Điều duy nhất có thể nhanh hơn/rõ ràng hơn là một hook bản địa thực hiện chính xác phương thức "hex_to_base64_digest". – maerics

Trả lời

17

vẻ khá rõ ràng và hiệu quả đối với tôi. Bạn có thể lưu cuộc gọi thành dải bằng cách chỉ định 0 số cho định dạng gói '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

Cảm ơn, có vẻ như vậy. Chỉ cần có vẻ rằng gói mỗi tham số trong mảng là untidy. – steveh7

Các vấn đề liên quan