MST

星途 面试题库

面试题:Ruby中常见的加密库及对称加密实现

在Ruby中,有哪些常见的加密库可以用于实现加密与解密技术?请以对称加密为例,使用其中一个库编写代码,实现对一段文本的加密和解密,要求代码能正常运行且注释清晰。
44.4万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试

在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}"

代码说明:

  1. 引入库:使用require 'openssl'引入openssl库。
  2. 定义待加密文本、密钥和初始化向量
    • plaintext定义了要加密的文本。
    • key通过OpenSSL::Random.random_bytes(32)生成一个32字节的随机密钥。
    • iv通过OpenSSL::Random.random_bytes(16)生成一个16字节的随机初始化向量。
  3. 加密过程
    • 创建一个AES-256-CBC模式的加密器cipher,并设置密钥和初始化向量。
    • 使用cipher.updatecipher.final方法对文本进行加密,并将结果合并。
    • 对加密后的文本进行Base64编码,以便于传输或存储。
  4. 解密过程
    • 创建一个AES-256-CBC模式的解密器decipher,并设置相同的密钥和初始化向量。
    • 对Base64编码的加密文本进行解码。
    • 使用decipher.updatedecipher.final方法对解码后的文本进行解密,并将结果合并。
  5. 输出结果:分别输出加密后的Base64编码文本和解密后的原始文本。