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

如何在Ruby中对字符串的每个字符进行XOR操作?

在Ruby中对字符串每个字符进行XOR操作的实现方法

嘿,我明白你在Ruby里实现字符串字符XOR时遇到的困扰了!其实思路和C++是相通的,只是Ruby的字符串处理方式略有不同,下面我给你详细讲怎么实现:

基础单密钥字符XOR

如果你的密钥是单个字符,我们可以直接遍历字符串的每个字符,将其转换为ASCII码后与密钥的ASCII码做异或操作,再转回字符即可。这里有个简单的实现方法:

def xor_single_key(str, key_char)
  # 把字符串拆成单个字符数组,逐个处理后再拼接回去
  str.chars.map do |char|
    # char.ord 获取字符的ASCII数值,和密钥的ASCII值异或后转回字符
    (char.ord ^ key_char.ord).chr
  end.join
end

使用示例

# 原始字符串
original = "Hello Ruby XOR Test"
# 用单个字符作为密钥
key = "A"

# 加密
encrypted = xor_single_key(original, key)
puts "加密后:#{encrypted}"

# 解密(XOR是可逆操作,用同样的方法即可)
decrypted = xor_single_key(encrypted, key)
puts "解密后:#{decrypted}" # 会输出原始字符串

多字符密钥的XOR实现

如果你的密钥是一个多字符的字符串(比如类似Vigenère密码的循环密钥),我们可以调整方法,让密钥循环作用在每个字符上:

def xor_multi_key(str, key_str)
  key_chars = key_str.chars
  str.chars.each_with_index.map do |char, idx|
    # 循环取密钥的字符,通过取余实现循环
    current_key_char = key_chars[idx % key_chars.length]
    (char.ord ^ current_key_char.ord).chr
  end.join
end

使用示例

original = "My secret message"
key = "SecretKey"

encrypted = xor_multi_key(original, key)
puts "多密钥加密后:#{encrypted}"

decrypted = xor_multi_key(encrypted, key)
puts "多密钥解密后:#{decrypted}" # 输出原始字符串

和C++实现的对比

其实Ruby的实现逻辑和C是一致的:都是遍历字符串的每个字节(字符),与密钥的对应字节做异或操作。区别在于C中char本身可以直接作为数值参与运算,而Ruby中需要用ord方法将字符转换为ASCII数值,操作完成后再用chr转回字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:13:21