面试题答案
一键面试在Ruby中,常见的加密库有openssl
。
以下是使用openssl
库进行对称加密(AES-256-CBC模式)的代码示例:
require 'openssl'
# 待加密的文本
plaintext = "Hello, World!"
# 加密密钥,长度必须是16、24或32字节
key = OpenSSL::Random.random_bytes(32)
# 初始化向量,长度必须是16字节
iv = OpenSSL::Random.random_bytes(16)
# 创建AES-256-CBC加密器
cipher = OpenSSL::Cipher::AES256CBC.new(:encrypt)
cipher.key = key
cipher.iv = iv
# 执行加密操作
encrypted_text = cipher.update(plaintext) + cipher.final
# 将加密后的文本进行Base64编码以便传输或存储
encoded_encrypted_text = [encrypted_text].pack("m").chomp
puts "加密后的文本(Base64编码): #{encoded_encrypted_text}"
# 创建AES-256-CBC解密器
decipher = OpenSSL::Cipher::AES256CBC.new(:decrypt)
decipher.key = key
decipher.iv = iv
# 对Base64编码的加密文本进行解码
decoded_encrypted_text = Base64.decode64(encoded_encrypted_text)
# 执行解密操作
decrypted_text = decipher.update(decoded_encrypted_text) + decipher.final
puts "解密后的文本: #{decrypted_text}"
代码说明:
- 引入库:使用
require 'openssl'
引入openssl
库。 - 定义待加密文本、密钥和初始化向量:
plaintext
定义了要加密的文本。key
通过OpenSSL::Random.random_bytes(32)
生成一个32字节的随机密钥。iv
通过OpenSSL::Random.random_bytes(16)
生成一个16字节的随机初始化向量。
- 加密过程:
- 创建一个AES-256-CBC模式的加密器
cipher
,并设置密钥和初始化向量。 - 使用
cipher.update
和cipher.final
方法对文本进行加密,并将结果合并。 - 对加密后的文本进行Base64编码,以便于传输或存储。
- 创建一个AES-256-CBC模式的加密器
- 解密过程:
- 创建一个AES-256-CBC模式的解密器
decipher
,并设置相同的密钥和初始化向量。 - 对Base64编码的加密文本进行解码。
- 使用
decipher.update
和decipher.final
方法对解码后的文本进行解密,并将结果合并。
- 创建一个AES-256-CBC模式的解密器
- 输出结果:分别输出加密后的Base64编码文本和解密后的原始文本。