Ruby 将十六进制打印为ASCII
我有一个字符串Ruby 将十六进制打印为ASCII,ruby,string,hex,ascii,Ruby,String,Hex,Ascii,我有一个字符串密码,其中包含 \x79\x6F\x75\x63\x61\x6E\x74\x68\x61\x78\x6D\x65 我想把它们打印成ASCII字符。我创建这个字符串是通过获取十六进制字符并在其前面添加\x输入(密码)不起作用。然而,当我做一些类似的事情时: shellcode = "\x65\x61" puts(shellcode) 它很好用。我做错了什么?字符串在Ruby中是一种奇怪的野兽,在Ruby 1.9中它们的处理方式发生了微妙的变化,这让事情变得有些复杂 如果您使用单引
密码
,其中包含
\x79\x6F\x75\x63\x61\x6E\x74\x68\x61\x78\x6D\x65
我想把它们打印成ASCII字符。我创建这个字符串是通过获取十六进制字符并在其前面添加\x
<代码>输入(密码)不起作用。然而,当我做一些类似的事情时:
shellcode = "\x65\x61"
puts(shellcode)
它很好用。我做错了什么?字符串在Ruby中是一种奇怪的野兽,在Ruby 1.9中它们的处理方式发生了微妙的变化,这让事情变得有些复杂 如果您使用单引号创建了该字符串,并且该字符串来自其他来源(例如DB),那么如果您
inspect
它,您将看到:
"\\x79\\x6F\\x75\\x63\\x61\\x6E\\x74\\x68\\x61\\x78\\x6D\\x65"
您可以通过少量列表处理来处理该问题:
s.scan(/\\x(..)/).map{|a| a.first.to_i(16).chr}.join
# => "youcanthaxme"
解释:
\\x
(扫描(/\\x(..)/)
)后提取两个字符来提取各个组件:[[“79”]、[“6F”]、[“75”]、[“63”]、[“61”]、[“6E”]、[“74”]、[“68”]、[“61”、[“78”]、[“6D”]、[“65”]
map
),我们将其转换为一个整数(a.first.to_int(16)
):[121、111、117、99、97、110、116、104、97、120、109、101]
chr
):[“y”、“o”、“u”、“c”、“a”、“n”、“t”、“h”、“a”、“x”、“m”、“e”]
“youcanthaxme”
你就是那个人!非常感谢你。这是我最难过的时候。