Jednoduché šifrování a dešifrování 2

Ostatní jazyky Ruby Jednoduché šifrování a dešifrování 2

Ukázkový program Jednoduché šifrování a dešifrování textu 2 v Ruby včetně zdrojových kódů.

class String
  def encrypt(passwd)
    self.length.times do |i|
      self[i] = (self[i].ord + passwd[i % passwd.length ].ord - ("A".ord - 1)).chr
      self[i] = (self[i].ord - ("Z".ord - "A".ord + 1)).chr if (self[i].ord > "Z".ord)
    end
    return self
  end

  def decrypt(passwd)
    self.length.times do |i|
      self[i] = (self[i].ord - (passwd[i % passwd.length ].ord - ("A".ord - 1))).chr
      self[i] = (self[i].ord + ("Z".ord - "A".ord + 1)).chr if (self[i].ord < "A".ord)
    end
    return self
  end
end


class Translator

  def input
    # zadavani vstupu
    print "Zadejte text: "
    @text = gets.upcase.strip
    print "Zadejte heslo: "
    @passwd = gets.upcase.strip
  end


  def run
    puts "Vitejte v programu sifrovani"
    puts "============================"
    option = ""
    while (!["3"].include?(option)) do
      puts "1 - sifrovat text"
      puts "2 - desifrovat text"
      puts "3 - konec"
      option = gets.strip
      case option
      when "1"
        input
        puts @text.encrypt(@passwd)
      when "2"
        input
        puts @text.decrypt(@passwd)
      end
    end
  end

end

translator = Translator.new
translator.run


 

  Aktivity (1)

Program pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Všechny články v sekci
Ruby
Miniatura
Následující článek
Ruby v Linuxu - GTK

 

 

Komentáře

Avatar
Adis
Neregistrovaný
Avatar
Adis:

Tady jsem zachytil problém, Neměli by se ještě někde nadefinovat ty proměnné A a Z? :)

 
Odpovědět 9.1.2012 12:09
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Adis
David Čápka:

To nejsou proměnné, ale ordinální hodnoty znaku. Je to standardní syntaxe Ruby, kód jste asi nespouštěl, protože funguje.

Odpovědět 9.1.2012 12:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar

Člen
Avatar
Odpovídá na David Čápka
:

po spuštění mi to napíše:

C:/Users/Adis/Do­cuments/NetBe­ansProjects/Tes­ting/lib/main­.rb:4:in `block in encrypt': undefined method `-' for A (NoMethodError)
from C:/Users/Adis/Do­cuments/NetBe­ansProjects/Tes­ting/lib/main­.rb:3:in `times'
from C:/Users/Adis/Do­cuments/NetBe­ansProjects/Tes­ting/lib/main­.rb:3:in `encrypt'
from C:/Users/Adis/Do­cuments/NetBe­ansProjects/Tes­ting/lib/main­.rb:43:in `run'
from C:/Users/Adis/Do­cuments/NetBe­ansProjects/Tes­ting/lib/main­.rb:54:in `<main>'

 
Odpovědět 9.1.2012 13:55
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na
David Čápka:

Aha, oni to změnili koukám. Pokud máte ruby 1.9 nebo novější, používejte .ord

Mělo by to jít takhle:

(?Z.ord - ?A.ord + 1) if (self[i].ord > ?Z.ord)

To druhé pak obdobně. Opravím to zde. Více na:
http://stackoverflow.com/…n-ruby-fails

Odpovědět 9.1.2012 14:28
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar

Člen
Avatar
:

Furt to háže stejnou chybu i po přidání ord... :-o

 
Odpovědět 9.1.2012 14:45
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na
David Čápka:

Budu to muset přepsat, oni to úplně změnili, už to nepůjde tím způsobem, jakým jsem to psal předtím a teď tu nemám Ruby 1.9. Docela zrada změnit takhle zásadní práci se stringy...

Můžete si stáhnout Ruby 1.8.7, tam to na 100% funguje nebo počkat, až to opravím (snad zítra večer). Nebo to můžete zkusit vymyslet :)

Odpovědět  +1 9.1.2012 14:53
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na
David Čápka:

Updatováno a odzkoušeno na Ruby 1.9.3 :)

Odpovědět 11.1.2012 12:10
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.