如何在Ruby中将Base64编码的MD5哈希转换为十六进制表示?
在Ruby中把Base64编码的MD5哈希转为十六进制表示
你需要分两步完成:先解码Base64得到二进制数据,再将二进制数据转换为十六进制字符串。Ruby的标准库就能实现,不需要额外依赖。
实现代码
require 'base64' base64_md5 = "+4aRl0iJ84yd/l1oZcT8ww==" # 第一步:解码Base64,得到二进制字符串 binary_data = Base64.decode64(base64_md5) # 第二步:将二进制数据转为小写十六进制字符串 hex_md5 = binary_data.unpack('H*').first.downcase puts hex_md5 # 输出: fb8691974889f38c9dfe5d6865c4fcc3
代码解释
Base64.decode64(base64_md5):将Base64编码的字符串解码为原始二进制数据(MD5哈希本身是16字节的二进制值)。unpack('H*'):把二进制数据按每个字节转换为两位十六进制字符(默认大写),返回一个包含结果的数组,用.first取出字符串。.downcase:将十六进制字符串转为小写,和你示例中的结果格式一致。
你也可以用另一种更直观的方式实现第二步:
hex_md5 = binary_data.bytes.map { |byte| sprintf('%02x', byte) }.join
这个方法遍历二进制数据的每个字节,用sprintf('%02x', byte)把每个字节格式化为两位小写十六进制,最后拼接成完整字符串。
内容的提问来源于stack exchange,提问作者Nikhil Razdan
相关产品推荐
相关产品推荐

