Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln

Einführung

So führen Sie Backend-Aufgaben in Rails aus: Sidekiq, Resque, Delayed Job, Action Job sind berühmt.

Die meiste Zeit erstelle ich Rails-Anwendungen auf AWS, sodass Backend-Aufgaben häufig von Lambdas ausgeführt werden.

Dieses Mal werde ich darüber schreiben, wie man die verschlüsselte Zeichenfolge auf der Rails-Seite mit Lambda (Python) erhält und entschlüsselt.

Fall

Es ist so.

Untitled presentation (1).png

Die Umgebung ist Schienen 5.0.

Rails ActiveSupport verfügt jetzt über einen praktischen MessageEncryptor zum Verschlüsseln von Zeichenfolgen Es gibt. ** Dies kann diesmal nicht verwendet werden. ** (Ich werde es später erklären)

Dieses Mal werde ich es selbst verschlüsseln und kombinieren.

Encryptable.rb



module Encryptable
  SECRET = 'hogehogehogehogehogehogehogehoge'
  IV = 'hogehogehogehoge'
  CIP_NAME = 'aes-256-cbc'

  def encrypt(value)
    b64data = Base64::strict_encode64(value)
    cip = OpenSSL::Cipher.new(CIP_NAME)
    cip.encrypt
    cip.key = SECRET
    cip.iv = IV
    encrypted = cip.update(b64data)
    encrypted << cip.final
    "#{Base64::strict_encode64(encrypted)}"
  end

  def decrypt(value)
    data = Base64::strict_decode64(value)
    cip = OpenSSL::Cipher.new(CIP_NAME)
    cip.decrypt
    cip.key = SECRET
    cip.iv = IV
    decrypted = cip.update(data)
    decrypted << cip.final
    "#{Base64::strict_decode64(decrypted)}".encode('UTF-8','UTF-8')
  end

Lambda Seite

Decryptable.py


import base64
from Crypto.Cipher import AES

SECRET = 'hogehogehogehogehogehogehogehoge'
IV = 'hogehogehogehoge'

def decrypt(encrypted_value):
  data = base64.b64decode(encrypted_value)
  cip = AES.new(SECRET, AES.MODE_CBC, IV)
  b64_decrypted_data = cip.decrypt(data)
  decrypted_data = base64.b64decode(b64_decrypted_data)
  return decrypted_data

MessageEncryptor kann nicht verwendet werden.

Wie Sie der Quelle von MessageEncryptor entnehmen können, Marshal wird für die Serialisierung verwendet. Aus diesem Grund werden der mit MessageEncryptor verschlüsselten Zeichenfolge nach der für Ruby typischen Marshalling-Methode Typinformationen usw. hinzugefügt. Es kann auf der Python-Seite nicht entschlüsselt werden.

Recommended Posts

Mit Ruby (Rails) verschlüsseln und mit Python entschlüsseln
Scraping mit Node, Ruby und Python
Einfaches Web-Scraping mit Python und Ruby
Ruby, Python und Map
Python und Ruby teilen sich
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
[Ruby vs Python] Benchmark-Vergleich zwischen Rails und Flask
Python und Ruby Slice Memo
Ruby- und Python-Syntax ~ branch ~
Python mit Pyenv und Venv
Vergleich von CoffeeScript mit JavaScript-, Python- und Ruby-Grammatik
Versionsverwaltung von Node, Ruby und Python mit anyenv
Funktioniert mit Python und R.
Lösen mit Ruby und Python AtCoder ARC 059 C Minimum-Quadrat-Methode
Lösen mit Ruby und Python AtCoder ABC178 D Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC151 D Suche nach Breitenpriorität
Lösen mit Ruby und Python AtCoder ABC133 D Kumulative Summe
Lösen mit Ruby und Python AtCoder AISING2020 D Iterative Square-Methode
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 A.
Lösen mit Ruby und Python AtCoder ABC011 C Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ABC153 E Dynamische Planungsmethode
Lösen mit Ruby und Python AtCoder ARC067 C Primfaktorisierung
Lösen mit Ruby, Perl, Java und Python AtCoder ATC 002 B.
Lösen mit Ruby und Python AtCoder ABC138 D Benachbarte Liste
Kommunizieren Sie mit FX-5204PS mit Python und PyUSB
Unterschied zwischen Ruby und Python Split
Roboter läuft mit Arduino und Python
Installieren Sie Python 2.7.9 und Python 3.4.x mit pip.
Neuronales Netzwerk mit OpenCV 3 und Python 3
AM-Modulation und Demodulation mit Python
Dynamischer Proxy mit Python, Ruby, PHP
Scraping mit Python, Selen und Chromedriver
HTTPS mit Django und Let's Encrypt
Mit OpenSSL mit Python 3 verschlüsselte Dateien entschlüsseln
JSON-Codierung und -Decodierung mit Python
Hadoop-Einführung und MapReduce mit Python
[GUI in Python] PyQt5-Drag & Drop-
Lesen und Schreiben von NetCDF mit Python
Ich habe mit PyQt5 und Python3 gespielt
Lesen und Schreiben von CSV mit Python
Mehrfachintegration mit Python und Sympy
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Sugoroku-Spiel und Zusatzspiel mit Python
FM-Modulation und Demodulation mit Python
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
AtCoder ARC104 B Kumulative Summe in Ruby, Python und Java gelöst
Lösen mit Ruby, Python und numpy AtCoder ABC054 B Matrixberechnung
Lösen mit Ruby, Python und networkx AtCoder ABC168 D Benachbarte Liste
Lösen mit Ruby, Perl, Java und Python AtCoder ABC 065 C-te Potenz
Datenpipeline-Aufbau mit Python und Luigi
Berechnen Sie das Standardgewicht und zeigen Sie es mit Python an
FM-Modulation und Demodulation mit Python Part 3
[Automatisierung] Bearbeiten Sie Maus und Tastatur mit Python
Passwortlose Authentifizierung mit RDS und IAM (Python)
Python-Installation und Paketverwaltung mit pip