Từ this trang web tôi có đoạn mã này:Mã hóa AES Python và mã hóa Ruby - hành vi khác nhau?
>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> list(bytearray(ciphertext))
[214, 131, 141, 100, 33, 86, 84, 146, 170, 96, 65, 5, 224, 155, 139, 241]
Khi tôi mất mảng này và biến nó thành một String trong Ruby và tiến tới giải mã nó, một lỗi xảy ra:
>> require 'openssl'
=> true
>> obj2 = OpenSSL::Cipher::Cipher.new("AES-128-CBC")
=> #<OpenSSL::Cipher::Cipher:0x007fa388389b30>
>> obj2.decrypt
=> #<OpenSSL::Cipher::Cipher:0x007fa388389b30>
>> obj2.key = 'This is a key123'
=> "This is a key123"
>> obj2.iv = 'This is an IV456'
=> "This is an IV456"
>> ciphertext = [214, 131, 141, 100, 33, 86, 84, 146, 170, 96, 65, 5, 224, 155, 139, 241].pack('c*')
=> "\xD6\x83\x8Dd!VT\x92\xAA`A\x05\xE0\x9B\x8B\xF1"
>> obj2.update(ciphertext) + obj2.final
OpenSSL::Cipher::CipherError: bad decrypt
from (irb):20:in `final'
from (irb):20
from /home/danyel/.rbenv/versions/2.0.0-p0/bin/irb:12:in `<main>'
Tại sao điều này không hoạt động?
Cảm ơn, đây là một phản ứng tuyệt vời. Bạn có biết tại sao điều này không hoạt động với 'AES.MODE_CFB'? – Danyel
Tôi giả sử bạn không làm như vậy. Bất kỳ ý tưởng làm thế nào để làm cho 'câu hỏi' công cộng (hoặc bumping nó) mà không cần tạo một cái mới? – Danyel
Làm thế nào bạn có thể đi theo hướng ngược lại từ Ruby sang Python. Python luôn có vẻ phàn nàn rằng "ValueError: Chuỗi đầu vào phải là bội số của 16 độ dài" – user2694306