2017-05-28 2 views
0

Ich habe folgende Verschlüsselungs-/Entschlüsselungs-OpenSSL (unter Linux in meinem Beispiel):Rubin OpenSSL DER Codierung "falsch endgültige Blocklänge"

$ echo test | openssl des -a -K 79616d7379616d73 -iv 1234567890ABCDEF 
+ax5NT+Pjh0= 

$ echo +ax5NT+Pjh0= | openssl des -a -d -K 79616d7379616d73 -iv 1234567890ABCDEF 
test 

alles gut. Ich muss es in Ruby-Code übersetzen. Soweit ich tat:

#!/usr/bin/env ruby 

require 'openssl' 

key = "\x79\x61\x6d\x73\x79\x61\x6d\x73" 
iv = "\x12\x34\x56\x78\x90\xAB\xCD\xEF" 
todecode = "+ax5NT+Pjh0=" 

def decode(encryptedString, key, iv) 
    decrypt = OpenSSL::Cipher::Cipher.new('des-cbc') 
    decrypt.decrypt 
    decrypt.key = key 
    decrypt.iv = iv 
    decrypt.update(encryptedString) + decrypt.final 
end 

decoded = decode(todecode, key, iv) 

puts decoded 

Es wirft mir den folgenden Fehler:

decode.rb:14:in `final': wrong final block length (OpenSSL::Cipher::CipherError)` 

Was mache ich falsch? Habe ich die falsche Verschlüsselung oder falsche Verwendung von Schlüssel/iv gewählt?

+1

Kleine nit ... Verwenden 'Echo -n', nicht' echo' (es sei denn, Sie die neue Linie wollen). Aber es ist wahrscheinlich nicht die Ursache Ihres Problems. – jww

Antwort

0

Scheint ich habe vergessen, base64_decode die Zeichenfolge.

todecode = Base64::decode64("+ax5NT+Pjh0=")

Verwandte Themen