2009-12-21 14 views
6

अस्पष्ट पुस्तकालय एक अच्छा सीबीसी algo प्रदान करता है ...रूबी openssl में समकक्ष एईएस?

// In Jascascript 
GibberishAES.enc("Made with Gibberish\n", "password"); 
// Outputs: "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" 

# On the command line 
echo "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" | 
    openssl enc -d -aes-256-cbc -a -k password 

मैं कैसे रूबी में इस डिक्रिप्शन कर सकते हैं? सीधा तरीका काम नहीं करता है ...

require 'openssl' 

def aes(m,k,t) 
    (aes = OpenSSL::Cipher::Cipher.new('aes-256-cbc').send(m)).key = k 
    aes.update(t) << aes.final 
end 

def encrypt(key, text) 
    aes(:encrypt, key, text) 
end 

def decrypt(key, text) 
    aes(:decrypt, key, text) 
end 

def p k 
    Digest::SHA256.digest(k) ## what goes here??? 
end 

require 'base64' 
def t x 
    ## also tried.. simply returning x... 
    Base64.decode64(x)  
end 


text = "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" 
pass = "password" 

decrypt(p(pass), t(text)) 
+0

पर इसे जांचें iv सेट नहीं हो रहा है ... इसका डिफ़ॉल्ट मान क्या है? मैंने इसे अतीत में हल किया है। इस पर फिर से ठोकर खा रहा है ... aaargh ... –

उत्तर

4

गिब्बरिश कोड में खोदना ... उत्तर के लिए सुराग प्रदान करता है। और पारंपरिक तंत्र क्यों काम नहीं करता है।

dec = function(string, pass) { 
    // string, password in plaintext 
    var cryptArr = Base64.decode(string), 
    salt = cryptArr.slice(8, 16), 
    pbe = openSSLKey(s2a(pass), salt), 
    key = pbe.key, 
    iv = pbe.iv; 
    cryptArr = cryptArr.slice(16, cryptArr.length); 
    // Take off the Salted__ffeeddcc 
    string = rawDecrypt(cryptArr, key, iv); 
    return string; 
}, 

रूबी में कनवर्ट करना अब काफी छोटा है .. इसे मेरे व्यक्तिगत भविष्य के संदर्भ के लिए नोट करना है।

require 'base64' 
require 'openssl' 

def decode(k,t) 
    cryptArr = Base64.decode64(t) 
    salt  = cryptArr[8..15] 
    data  = cryptArr[16..-1] 

    aes = OpenSSL::Cipher::Cipher.new('AES-256-CBC').decrypt 
    aes.pkcs5_keyivgen(k, salt, 1) 
    s = aes.update(data) + aes.final 
end 

orig = "Made with Gibberish\n" 
cipr = "U2FsdGVkX1+21O5RB08bavFTq7Yq/gChmXrO3f00tvJaT55A5pPvqw0zFVnHSW1o" 
pass = "password" 

puts decode(pass, cipr) 
4

मैंने मूल गिब्बरिश जेएस लाइब्रेरी लिखी, और अंत में मैं रूबी में स्थिति को सुधारने के लिए चारों ओर घूम गया। रयान ओबेरॉय से उपरोक्त कोड बिल्कुल सही है, लेकिन मैं आगे बढ़ गया हूं और एक ही काम करने के लिए एक मणि बनाया है। https://github.com/mdp/gibberish