【问题标题】:Printing hex to ASCII将十六进制打印为 ASCII
【发布时间】:2012-11-12 21:18:12
【问题描述】:

我有一个字符串 password 包含这个

\x79\x6F\x75\x63\x61\x6E\x74\x68\x61\x78\x6D\x65

我想将它们打印为 ASCII 字符。我通过获取十六进制字符并在它们前面添加\x 创建了这个字符串。 puts(password) 不起作用。但是,当我执行以下操作时:

shellcode = "\x65\x61"
puts(shellcode)

它工作得很好。我做错了什么?

【问题讨论】:

    标签: ruby string hex ascii


    【解决方案1】:

    字符串在 Ruby 中是一种奇怪的野兽,它们的处理方式在 Ruby 1.9 中发生了微妙的变化,这使事情变得有些复杂。

    如果您使用单引号创建该字符串并来自其他来源(例如数据库),那么如果您 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" 
    

    解释一下:

    1. 我们通过提取\\x (scan(/\\x(..)/)) 后面的两个字符来提取各个组件:[["79"], ["6F"], ["75"], ["63"], ["61"], ["6E"], ["74"], ["68"], ["61"], ["78"], ["6D"], ["65"]]

    2. 对于列表中的每个元素 (map),我们将其转换为整数 (a.first.to_int(16)):[121, 111, 117, 99, 97, 110, 116, 104, 97, 120, 109, 101]

    3. 然后我们找到对应那个ascii值的ascii字符(chr):["y", "o", "u", "c", "a", "n", "t", "h", "a", "x", "m", "e"]

    4. 然后我们一起join他们:"youcanthaxme"

    【讨论】:

    • 你就是男人!太感谢了。度过了最艰难的时光。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 2014-06-24
    • 2016-06-10
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多