Crypter avec Ruby (Rails) et décrypter avec Python

introduction

Pour effectuer des tâches de backend dans Rails, Sidekiq, Resque, Delayed Job, Action Job sont célèbres.

La plupart du temps, je crée des applications Rails sur AWS, les tâches de backend sont donc souvent gérées par des lambdas.

Cette fois, j'écrirai sur la façon d'obtenir la chaîne de caractères cryptée côté Rails avec lambda (python) et de la décrypter.

Cas

C'est comme ça.

Untitled presentation (1).png

L'environnement est rails 5.0.

Rails Un outil pratique appelé MessageEncryptor est maintenant disponible pour ActiveSupport pour crypter les chaînes. Il y a. ** Ceci ne peut pas être utilisé cette fois. ** (je vous expliquerai plus tard)

Cette fois, je vais le chiffrer moi-même et le combiner.

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

Côté Lambda

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 ne peut pas être utilisé.

Comme vous pouvez le voir à partir de la source de MessageEncryptor, Marshal est utilisé pour la sérialisation. Pour cette raison, les informations de type etc. sont ajoutées à la chaîne de caractères chiffrée avec MessageEncryptor par la méthode de rassemblement propre à ruby. Il ne peut pas être déchiffré côté Python.

Recommended Posts

Crypter avec Ruby (Rails) et décrypter avec Python
Scraping avec Node, Ruby et Python
Scraping Web facile avec Python et Ruby
Ruby, Python et carte
Python et Ruby se séparent
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Python sur Ruby et Ruby en colère sur Python
[Ruby vs Python] Comparaison de référence entre Rails et Flask
Mémo tranche python et rubis
Syntaxe Ruby et Python ~ branch ~
python avec pyenv et venv
Comparaison de CoffeeScript avec la grammaire JavaScript, Python et Ruby
Gestion des versions de Node, Ruby et Python avec anyenv
Fonctionne avec Python et R
Résolution avec Ruby et Python AtCoder ARC 059 C Méthode du carré minimum
Résolution avec Ruby et Python AtCoder ABC178 D Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC151 D Recherche de priorité de largeur
Résolution avec Ruby et Python AtCoder ABC133 D Somme cumulée
Résolution avec Ruby et Python AtCoder AISING2020 D Méthode carrée itérative
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 A
Résolution avec Ruby et Python AtCoder ABC011 C Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ABC153 E Méthode de planification dynamique
Résolution avec Ruby et Python AtCoder ARC067 C factorisation premier
Résolution avec Ruby, Perl, Java et Python AtCoder ATC 002 B
Résolution avec Ruby et Python AtCoder ABC138 D Liste adjacente
Communiquez avec FX-5204PS avec Python et PyUSB
Différence entre Ruby et Python Split
Robot fonctionnant avec Arduino et python
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Proxy dynamique avec python, ruby, PHP
Grattage avec Python, Selenium et Chromedriver
HTTPS avec Django et Let's Encrypt
Décrypter les fichiers cryptés avec OpenSSL avec Python 3
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
J'ai comparé la vitesse de Hash avec Topaz, Ruby et Python
AtCoder ARC104 B Somme cumulative résolue en Ruby, Python et Java
Résolution avec Ruby, Python et numpy AtCoder ABC054 B Calcul de la matrice
Résolution avec Ruby, Python et networkx AtCoder ABC168 D Liste adjacente
Résolution avec Ruby, Perl, Java et Python AtCoder ABC 065 C-th power
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Modulation et démodulation FM avec Python Partie 3
[Automation] Manipulez la souris et le clavier avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip