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.
Es ist so.
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
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
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