加密器公开用于加密和解密属性值的加密 API,该 API 由 ActiveRecord::Encryption::EncryptedAttributeType
使用。
它与 KeyProvider
交互以获取密钥,并将实际加密算法委托给 ActiveRecord::Encryption::Cipher
。
方法
- B
- D
- E
- N
常量
DECRYPT_ERRORS | = | [OpenSSL::Cipher::CipherError, Errors::EncryptedContentIntegrity, Errors::Decryption] |
ENCODING_ERRORS | = | [EncodingError, Errors::Encoding] |
THRESHOLD_TO_JUSTIFY_COMPRESSION | = | 140.bytes |
属性
[R] | compressor | 用于压缩有效负载的压缩器 |
类公共方法
new(compress: true, compressor: nil) 链接
选项
-
:compress
- 指示是否应在加密之前压缩记录的布尔值。默认为true
。 -
:compressor
- 要使用的压缩器。-
如果提供压缩器,则将使用它。
-
否则,它将使用 ActiveRecord::Encryption.config.compressor,其默认值为
Zlib
。
如果要使用自定义压缩器,它必须响应
deflate
和inflate
。 -
源代码:显示 | 在 GitHub 上
# File activerecord/lib/active_record/encryption/encryptor.rb, line 25 def initialize(compress: true, compressor: nil) @compress = compress @compressor = compressor || ActiveRecord::Encryption.config.compressor end
实例公共方法
binary?() 链接
源代码:显示 | 在 GitHub 上
# File activerecord/lib/active_record/encryption/encryptor.rb, line 84 def binary? serializer.binary? end
decrypt(encrypted_text, key_provider: default_key_provider, cipher_options: {}) 链接
解密 encrypted_text
并以纯文本形式返回结果
选项
源代码:显示 | 在 GitHub 上
# File activerecord/lib/active_record/encryption/encryptor.rb, line 67 def decrypt(encrypted_text, key_provider: default_key_provider, cipher_options: {}) message = deserialize_message(encrypted_text) keys = key_provider.decryption_keys(message) raise Errors::Decryption unless keys.present? uncompress_if_needed(cipher.decrypt(message, key: keys.collect(&:secret), **cipher_options), message.headers.compressed) rescue *(ENCODING_ERRORS + DECRYPT_ERRORS) raise Errors::Decryption end
encrypt(clear_text, key_provider: default_key_provider, cipher_options: {}) 链接
加密 clean_text
并返回加密后的结果
在内部,它将
-
压缩和加密
clean_text
作为消息有效负载 -
使用
ActiveRecord::Encryption.message_serializer
(默认情况下为ActiveRecord::Encryption::SafeMarshal
)对其进行序列化 -
使用
Base
64 对结果进行编码
选项
源代码:显示 | 在 GitHub 上
# File activerecord/lib/active_record/encryption/encryptor.rb, line 49 def encrypt(clear_text, key_provider: default_key_provider, cipher_options: {}) clear_text = force_encoding_if_needed(clear_text) if cipher_options[:deterministic] validate_payload_type(clear_text) serialize_message build_encrypted_message(clear_text, key_provider: key_provider, cipher_options: cipher_options) end
encrypted?(text) 链接
返回文本是否已加密
源代码:显示 | 在 GitHub 上
# File activerecord/lib/active_record/encryption/encryptor.rb, line 77 def encrypted?(text) deserialize_message(text) true rescue Errors::Encoding, *DECRYPT_ERRORS false end