Шифрование, дешифрование с использованием Rails - PullRequest
43 голосов
/ 31 марта 2011

Некоторое время назад я видел возможность расшифровывать и шифровать строки в рельсах без какой-либо библиотеки, но я не могу найти запись в блоге.

Я хочу иметь возможность шифровать и дешифровать строки, не включая ничего. Использование того же ключа для всего остального в рельсах, например, для подписанных файлов cookie.

Есть идеи?

Ответы [ 3 ]

120 голосов
/ 31 марта 2011

Вы имеете в виду это ?: 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.

7 голосов
/ 29 марта 2018

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)
0 голосов
/ 03 декабря 2018

Если вы хотите использовать тот же ключ, который может сохраняться в любом запросе / ответе, тогда вы можете использовать следующий подход настройки.

// данные, которые вы хотите зашифровать и пометить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...