2011-01-18 26 views
6

Merhaba dize sıkıştırmak veya bir dizeyi şifrelemek için herhangi bir yerel işlev (başka bir taş yüklemez veya kabuktan openssl çağırmıyor) var mı? Mysql sıkıştırması gibi bir tür.Dizeleri sıkıştırmak/şifrelemek için yerel yakut yöntemleri?

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

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

ve aynı şekilde bazı dize şifrelemek ?

cevap

14

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

Zlib belgelerine göre, Zlib :: Deflate.deflate (string [, level]) 've' Zlib :: Inflate .inflate (string [, level]) ', yukarıdaki deflate/inflate yöntemlerine" hemen hemen eşdeğer "dir. –

5

OpenSSL ve Zlib. this question'da OpenSSL kullanımına bir örnek var.

+2

gelen Şifreleme

# 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 

http://ruby-doc.org/stdlib/libdoc/zlib/rdoc/classes/Zlib.html itibaren gerçekten operasyonun herhangi sıralaması anlamına değil o fakat metin ilk sıkıştırılır ve daha sonra şifrelenmiş olması durumunda daha iyi bir sıkıştırma oranını aldığını. –

+0

Dosya ilk kez şifrelenmişse neredeyse hiç sıkıştırma yapmamalısınız. Bunu okuyun: https://blog.appcanary.com/2016/encrypt-or-compress.html – JLB