OpenSSL

require 'openssl'
require 'base64'
require 'digest'

#创建key
 key = OpenSSL::PKey::RSA.new 2048
 open 'private_key.pem','w' do |io| io.write key.to_pem end
 open 'public_key.pem','w' do |io| io.write key.public_key.to_pem end

#导出key
 cipher = OpenSSL::Cipher.new 'AES-128-CBC'
 pass_phrase = 'he is a bad guy'
 key_secure = key.export(cipher,pass_phrase) #导出
 open 'private_secure.pem','w' do |io|
     io.write key_secure
# end

#加载key
 key2 = OpenSSL::PKey::RSA.new(File.read 'private_key.pem')
 p key2.public?

 key3 = OpenSSL::PKey::RSA.new(File.read 'public_key.pem')
 p key3.private?

#加载一个加密的key
 key4_pem = File.read 'private_secure.pem'
 key4 = OpenSSL::PKey::RSA.new(key4_pem,pass_phrase)
 p key4.public?
 p key4.private?

#签名 为了验证签名,在文档的哈希值被计算,签名用公开密钥解密,然后将结果和被被计算的hash比较,如果相等,签名奏是有效的
 digest = OpenSSL::Digest::SHA256.new
 signature = key.sign(digest,"document")
 if key.verify(digest,signature,"document")
     puts 'Valid'
 else
     puts 'Invalid'
 end


#加密 解密
 data = "Very, very confidential data"
 cipher = OpenSSL::Cipher.new("AES-256-CBC")
 cipher.encrypt
 key = cipher.random_key
 iv = cipher.random_iv
 encrypted = cipher.update(data)+cipher.final


 deciper = OpenSSL::Cipher.new("AES-256-CBC")
 deciper.decrypt
 deciper.key = key
 deciper.iv = iv
 plain = deciper.update(encrypted) + deciper.final




#随机字符串
  RandomString = "MoE3PKphuc4bjT7In5JN21DwvGZ8kmlY9VFSA6xLfg0WHaOdeBsqCiz"
  RandomString1 = "psb0jvfygGSezZ9TOAqJIhPckW7dR8DlHQXwxo3t26YnaiULFMB5VEm"
#加密

    str = "123456"
    key = Digest::SHA256.digest(RandomString)
    iv = Digest::MD5.digest(RandomString1)

    aes = OpenSSL::Cipher.new('AES-256-CBC')
    aes.encrypt
    aes.key = key
    aes.iv = iv
    encrypted = Base64.encode64(aes.update(str) + aes.final).strip

#解密
    st = Base64.decode64(encrypted)
    daes = OpenSSL::Cipher.new('AES-256-CBC')
    daes.decrypt
    daes.key = key
    daes.iv = iv
    p daes.update(st) + daes.final
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值