Шифрование, дешифрование с использованием Rails
Недавно я видел возможность расшифровать и зашифровать строки в рельсах, не включая любую библиотеку, но я не могу найти сообщение в блоге.
Я хочу иметь возможность шифровать и расшифровывать строки, не включая ничего.
Использование того же ключа для всего остального в рельсах, например, подписанных файлов cookie.
Любые идеи?
Ответы
Ответ 1
Вы имеете в виду это: ActiveSupport:: MessageEncryptor. Ниже приведен способ повторного использования секретности приложений Rails 4:
crypt = ActiveSupport::MessageEncryptor.new(Rails.application.secrets.secret_key_base)
encrypted_data = crypt.encrypt_and_sign('my confidental data')
И зашифрованные данные могут быть дешифрованы с помощью:
decrypted_back = crypt.decrypt_and_verify(encrypted_data)
Ранее Rails 3 использовал параметр конфигурации secret_token
, а методы шифрования были encrypt
decrypt
.
Ответ 2
Rails 5 требует, чтобы ключ был 32 байта.
Изменить на Rails 4 ответ, который работает для Rails 5:
key = SecureRandom.random_bytes(32)
crypt = ActiveSupport::MessageEncryptor.new(key)
encrypted_data = crypt.encrypt_and_sign('my confidental data')
Расшифровать:
decrypted_back = crypt.decrypt_and_verify(encrypted_data)
Ответ 3
Если вы хотите использовать тот же ключ, который может сохраняться на любом запросе/ответе, вы можете использовать следующий подход к настройке.
//данные, которые вы хотите шифровать и флаг true для шифрования, и false для дешифрования
def data_encryption(data, flag)
data = data.to_s
key = "any string" (32 alphanumeric string length is preferred)
if flag
return Base64.encode64(data) + key
else
data = data.sub(key, '')
return Base64.decode64(data)
end
end