Meinen Sie das hier? ActiveSupport::MessageEncryptor . Hier ist der Weg zur Wiederverwendung von Rails 5+ auf Ruby 2.4+ Anwendung das Geheimnis:
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base[0..31])
encrypted_data = crypt.encrypt_and_sign('my confidental data')
Und verschlüsselte Daten können mit entschlüsselt werden:
decrypted_back = crypt.decrypt_and_verify(encrypted_data)
Das obige Beispiel verwendet die ersten 32 Zeichen des Rails-App-Geheimnisses als Verschlüsselungs- und Signierschlüssel, da der Standard MessageEncryptor
Chiffre aes-256-gcm
erfordert genau 256-Bit-Schlüssel. Konventionell generiert Rails bei der App-Erstellung ein Geheimnis in Form einer Zeichenkette aus 128 Hex-Ziffern.
Wichtig! Ruby 2.4 Upgrade-Hinweis
Vor Ruby 2.4 y Schiene 5 gab es keine Beschränkung der Schlüsselgröße, und es war üblich, das gesamte Geheimnis einfach in den Verschlüsselungsinitialisierer einzufügen:
# pre-2.4
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)
Intern verwendete der Verschlüsselungsalgorithmus (AES256GCM von OpenSSL) nur 32 Zeichen des Schlüssels, aber der Signieralgorithmus (SHA1) verbrauchte alle 128 Zeichen.
Wenn also eine Anwendung von vor 2.4 Ruby aktualisiert wird und die Anwendung zuvor die Daten mit einer unbeschränkten Schlüsselgröße verschlüsselt hat, wird die MessageEncryptor
muss ein vollständiges Geheimnis im zweiten Parameter erhalten, um zu vermeiden, dass ActiveSupport::MessageVerifier::InvalidSignature
über die Entschlüsselung der Altdaten:
# post-2.4 upgrade
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base[0..31], Rails.application.secrets.secret_key_base)