You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby代码出现NoMethodError错误的原因是什么?

Ruby代码NoMethodError错误原因分析

你的代码

require 'httparty'
require 'base64'
URL = 'http://ptl-a4b5e023-f4db1f7c.libcurl.so/'

def login(username)
  res = HTTParty.post(URL+'login.php',body:{username:username,password: 'Password1'}>

  return res.headers["set-cookie"].split("=")[1]
end

cookie =  login("administ")
signature1 = Base64.decode64(cookie).split("__")[1]

def xor(str1, str2)
  ret =""
  str1.split(//).each_with_index do |c, i|
    ret[i] = (str1[i].ord ^ str2[i].ord).chr
  end
  return ret
end

username2 = xor("rator\00\00\00",signature1)

cookie2 = login(username2).gsub("%2B","+")
puts cookie2
signature2 = Base64.decode64(cookie2).split("__")[1]
puts signature2

puts Base64.encode64("administrator--#{signature2}")

错误信息

ruby cbcccccc.rb 
cbcccccc.rb:17:in `block in xor': undefined method `[]' for nil (NoMethodError)

    ret[i] = (str1[i].ord ^ str2[i].ord).chr
                                ^^^
    from cbcccccc.rb:16:in `each'
    from cbcccccc.rb:16:in `each_with_index'
    from cbcccccc.rb:16:in `xor'
    from cbcccccc.rb:22:in `<main>'

错误原因

  1. 语法错误导致前置数据异常
    login方法里的HTTParty.post调用末尾符号写错了,应该是})却写成了}>。这个语法错误会让login方法执行出错,返回的cookie值不符合预期,进而导致signature1的长度或内容异常,为后续XOR操作埋下问题。

  2. XOR函数未处理字符串长度不匹配场景
    xor函数直接遍历str1的每个字符,但没检查str2的长度是否和str1一致。调用xor("rator\00\00\00", signature1)时,如果signature1的长度比"rator\00\00\00"短,循环到str2没有覆盖的索引位置时,str2[i]会返回nil,此时调用ord方法就会触发NoMethodError。

内容的提问来源于stack exchange,提问作者Batman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:24:50