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.
C'est comme ça.
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
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
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