I’ve just had to create SagePay encryption in Ruby that isn’t well documented anywhere, eventually found an old broken gem that I was able to use for parts. Thought someone might find it useful!
def self.encrypt(input, password)
cipher = OpenSSL::Cipher.new('AES-128-CBC')
cipher.send(:encrypt)
cipher.key = password
cipher.iv = password
result = cipher.update(input) + cipher.final
"@#{result.unpack('H*').first.upcase}"
end