Пытаетесь запустить алгоритм rc4, но он не распознает метод XOR? Или что-то еще происходит? Я получаю сообщение об ошибке, когда он переходит к процессу определения (текст).
Ошибка:
rc4.rb:26:in block in process': undefined method
^' для "4":String (NoMethodError) из rc4.rb:26:in upto'
from rc4.rb:26:in
process' из rc4.rb:21:in encrypt'
from rc4.rb:48:in
'
Код:
class Rc4
def initialize(str)
@q1, @q2 = 0, 0
@key = []
str.each_byte {|elem| @key << elem} while @key.size < 256
@key.slice!([email protected]) if @key.size >= 256
@s = (0..255).to_a
j = 0
0.upto(255) do |i|
j = (j + @s[i] + @key[i] )%256
@s[i], @s[j] = @s[j], @s[i]
end
end
def encrypt!(text)
process text
end
def encrypt(text)
process text.dup
end
private
def process(text)
0.upto(text.length-1) {|i| text[i] = text[i] ^ round}
text
end
def round
@q1 = (@q1 + 1)%256
@q2 = (@q2 + @s[@q1])%256
@s[@q1], @s[@q2] = @s[@q2], @s[@q1]
@s[(@s[@q1]+@s[@q2])%256]
end
end
puts "Enter key."
keyInput = gets.chomp
keyInput = keyInput.to_s
encryptInstance = Rc4.new(keyInput)
decryptInstance = Rc4.new(keyInput)
puts "Enter plaintext."
plainInput = gets.chomp
plainInput = plainInput.to_s
cipherText = encryptInstance.encrypt(plainInput)
puts "Plaintext is: " + plainInput
puts "Ciphertext is: " + cipherText
decryptedText = decryptInstance.encrypt(cipherText)
puts "Decrypted text is: " + decryptedText
0.upto(text.length-1) {|i| text[i] = text[i] ^ round}
не будет работать, так как вы пытаетесь использовать строку:text[i]
в выражении:text[i] ^ round
должно бытьtext[i].to_i ^ round
или что-то в этом роде. - person Surya   schedule 08.10.2014