2011-01-18 8 views
6

Witam, czy istnieje jakaś natywna funkcja (nie instaluję innego klejnotu, czy też nie wołam openssl od powłoki), aby skompresować ciąg lub zaszyfrować ciąg?natywne metody ruby ​​do kompresji/szyfrowania ciągów znaków?

coś w rodzaju kompresji mysql.

"a very long and loose string".compress
output = "8d20\1l\201"

"8d20\1l\201".decompress
output = "a very long and loose string"?

i podobnie do szyfrowania sznurek?

Odpowiedz

14

Od http://ruby-doc.org/stdlib/libdoc/zlib/rdoc/classes/Zlib.html

# aka compress 
    def deflate(string, level) 
    z = Zlib::Deflate.new(level) 
    dst = z.deflate(string, Zlib::FINISH) 
    z.close 
    dst 
    end 

    # aka decompress 
    def inflate(string) 
    zstream = Zlib::Inflate.new 
    buf = zstream.inflate(string) 
    zstream.finish 
    zstream.close 
    buf 
    end 

Szyfrowanie z http://snippets.dzone.com/posts/show/991

require 'openssl' 
require 'digest/sha1' 
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") 
c.encrypt 
# your pass is what is used to encrypt/decrypt 
c.key = key = Digest::SHA1.hexdigest("yourpass") 
c.iv = iv = c.random_iv 
e = c.update("crypt this") 
e << c.final 
puts "encrypted: #{e}\n" 
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc") 
c.decrypt 
c.key = key 
c.iv = iv 
d = c.update(e) 
d << c.final 
puts "decrypted: #{d}\n" 
+0

Według dokumentów Zlib: 'Zlib :: Deflate.deflate (string [, level])' i 'Zlib :: Inflate .flflate (string [, level]) 'są" prawie równoważne "z powyższymi metodami deflate/inflate. –

5

OpenSSL i Zlib. Istnieje przykład użycia OpenSSL w this question.

+2

Nie dlatego, że tak naprawdę oznaczać dowolną kolejność operacji, ale dostaje lepszy współczynnik kompresji, jeśli tekst jest najpierw kompresowane i następnie szyfrowane. –

+0

Powinieneś uzyskać praktycznie brak kompresji, jeśli plik jest najpierw zaszyfrowany. Przeczytaj to: https://blog.appcanary.com/2016/encrypt-or-compress.html – JLB

Powiązane problemy