我正在尝试理解这行红宝石代码:
token.unpack('m0').first.unpack('H*').first
正在转换
R1YKdH//cZKubZlA09ZIVZQ5/cxInvmokIACnl3MKJ0=
到
47560a747fff7192ae6d9940d3d648559439fdcc489ef9a89080029e5dcc289d
据我所知,它是base64到hex转换,但是当我尝试做同样的事情时,它与转换后的不匹配。
我需要在Java中实现相同的功能。
答案 0 :(得分:1)
所以我要打破这个。第一步是token.unpack('m0')
。根据{{3}} unpack('m0')
将解码base64,类似于内置的Base64
libararies Base64.decode64(string)
函数。但unpack在这里返回arry,只有1个元素,转换后的base64。因此,我们使用token.unpack('m0').first
来获取token.unpack('m0')
返回的数组的第一个(在本例中是唯一的)元素。如果这就是全部,那么你说它只是base64是正确的。但是,解压缩的base64再次解压缩,这次使用Idiosyncratic Ruby,它将字符转换为十六进制。最后,因为那将返回一个数组,你再次使用它再使它只是一个字符串。
总而言之,正在发生的事情是,首先将字符串从base64解码为字符串,然后将其转换为十六进制。