Tag: 加密

在Ruby / Rails中,如何解密由PKCS7加密和签名的字符串

在PayPal上的这个RailsCast中,它向您展示了如何在将URL参数发送到PayPal之前对其进行加密。 PAYPAL_CERT_PEM = File.read(“#{Rails.root}/certs/paypal_cert.pem”) APP_CERT_PEM = File.read(“#{Rails.root}/certs/app_cert.pem”) APP_KEY_PEM = File.read(“#{Rails.root}/certs/app_key.pem”) def encrypt_for_paypal(values) signed = OpenSSL::PKCS7::sign(OpenSSL::X509::Certificate.new(APP_CERT_PEM), OpenSSL::PKey::RSA.new(APP_KEY_PEM, ”), values.map { |k, v| “#{k}=#{v}” }.join(“\n”), [], OpenSSL::PKCS7::BINARY) OpenSSL::PKCS7::encrypt([OpenSSL::X509::Certificate.new(PAYPAL_CERT_PEM)], signed.to_der, OpenSSL::Cipher::Cipher::new(“DES3”), OpenSSL::PKCS7::BINARY).to_s.gsub(“\n”, “”) end 假设我正在为PayPal的服务器编写代码。 我该如何解密这个字符串? 在我看来,这个代码公钥都签署了字符串(以validation真实性),然后加密字符串(以提供隐私)。 代码用于反向,解密和validation真实性是什么? 谢谢。

如何在PHP中生成密码,就像Ruby on Rails中的Devise Gem一样

我正在将Ruby on Rails的网站更新为PHP。 我需要生成由Ruby on Rails中的Devise Gem生成的密码。 我必须知道使用PHP创建相同方法的密码的哈希方法是什么。 但是作为初学者,在Ruby on Rails中找到代码并不容易。 如果有人知道我应该在哪里找到它,请帮助我。 这两个都是我发现的: 1) The configuration of encryptor is disabled in devise.rb like below: # config.encryptor = :sha1 2) I read the comments very carefully then I found that they using sha512 and bcrypt as default encryptor. # (default), :sha512 and :bcrypt. Devise also supports […]

设计模型多次运行before_save?

我的客户希望加密所有用户数据,所以我创建了一个before_save和after_find回调,它将使用Gibberish加密某些属性: # user.rb before_save UserEncryptor.new after_find UserEncryptor.new # user_encryptor.rb class UserEncryptor def initialize @cipher = Gibberish::AES.new(“password”) end def before_save(user) user.first_name = encrypt(user.first_name) user.last_name = encrypt(user.last_name) user.email = encrypt(user.email) unless not user.confirmed? or user.unconfirmed_email end def after_find(user) user.first_name = decrypt(user.first_name) user.last_name = decrypt(user.last_name) user.email = decrypt(user.email) unless not user.confirmed? or user.unconfirmed_email end private def encrypt(value) @cipher.enc(value) […]

我必须使用什么加密程序通过HTTP协议发送加密的“电子邮件”和“密码”值?

我正在使用Ruby on Rails 3,我希望通过HTTP协议发送’email’和’password’值(我知道,我不应该,但我需要它)。 我需要将用户凭据从我的客户端应用程序发送到我的服务应用程序*。 我可以使用公共私有RSA密钥来实现这一点,但如果是这样,我必须不通过HTTP将公钥发送给收件人,否则黑客可以窃取密钥并解密内容。 另一方面,HMAC加密(如果我理解的话)仅用于validation数据的完整性和消息的真实性。 我听说过AES …… 这对我的目的有好处吗? 如果是这样,我可以在哪里找到关于如何在Ruby \ Ruby on Rails上使用它的教程? 我“只是”需要在客户端加密用户凭据并在服务器端解密。 PS I:如果我写错了,请告诉我。 PS II:如果您建议其他方法,请告诉我! 更新我 *客户端是Web应用程序(站点Web,例如’www.site1.com),服务器是另一个Web应用程序(另一个站点Web,例如’www.site2.com)。 更新II 使用RSA加密…… 客户端I服务步骤: 客户生成公钥\私钥巴黎 我(一个真人)手动将公钥从客户端复制粘贴到服务 客户端向服务发送包含加密用户凭证的消息(客户端不发送\将公钥附加到HTTP请求) 使用公钥(只有服务知道)的服务,解密用户凭证并继续登录用户 现在,如果我发送公钥而不是执行第2步,那么客户端必须通过HTTP协议在步骤3中发送公钥,黑客可以 拦截消息 拿公钥 解密用户凭据并窃取它们 那么, 如果我将公钥发送到服务 , 是否应该 使用RSA加密来 加密用户凭证 (那些是重要和私人信息)?

在ruby中使用Blowfish加密字符串会返回比php中的相同进程更短的字符串

这让我很困惑。 当我尝试使用以下输入来加密带有Blowfish的字符串时:key =“some key”input =“input string” 我得到以下结果: ruby: [“79af8c8ee9220bde”] php: 79af8c8ee9220bdec2d1c9cfca7b13c6 我将从php应用程序接收字符串,所以我需要让这两个同步,但我不明白为什么php字符串会更长。 我错过了什么? php代码: php > require_once ‘Crypt/Blowfish.php’; php > $input = “input string”; php > $key = “some key”; php > $crypt = new Crypt_Blowfish($key); php > echo bin2hex($crypt->encrypt($input)); 79af8c8ee9220bdec2d1c9cfca7b13c6 ruby代码: irb(main):001:0> require ‘rubygems’ => true irb(main):002:0> require ‘crypt/blowfish’ => true irb(main):003:0> input = […]

Rails 3 / Devise:密码盐不再被创建?

我一直在研究一个项目,现在使用Devise进行用户身份validation。 无论何时创建用户,它都会为它们生成密码盐以及加密密码。 当我进入这个项目的尾端时,我正在测试用户注册,并注意到我的新角色没有在这些新用户的数据库中创建密码盐,而我的老用户都有盐。 新用户可以签到好,但我担心为什么Devise不再创造盐。 我遇到的Devise唯一的奇怪之处就是当我升级模块并记住日志说有关删除加密的内容时,因为bcrypt现在是默认加密,或者是那种效果。 我这样做了……不确定这是否与当前问题有关。 另外,想想也许是我的项目是蠢蠢欲动的,我从零开始创建了一个全新的Rails应用程序并添加了Devise,甚至这个新项目也没有为用户创建盐。 在Devise中有一种设置密码盐的新方法,或者有人知道为什么不再生成盐吗? 不幸的是,Devise wiki在这个问题上没有太多可说的内容,到目前为止谷歌一直没有成功。 或者……首先是否需要加盐? 我想,似乎更安全。 我的用户/设计配置如下。 配置/初始化/ devise.rb Devise.setup do |config| config.mailer_sender = “mail@domain.com” require ‘devise/orm/active_record’ config.authentication_keys = [ :login ] config.stretches = 10 config.encryptor = :bcrypt # Setup a pepper to generate the encrypted password. config.pepper = “79c2bf3b[…]” end 应用程序/模型/ user.rb devise :database_authenticatable, :registerable, :confirmable, :recoverable, :rememberable, […]

如何手动解密Rails 5会话cookie?

我有权访问 config.action_dispatch.encrypted_cookie_salt config.action_dispatch.encrypted_signed_cookie_salt secrets.secret_key_base 完整的cookie字符串(包括– ) 我在Rails 4中看到了这样做的方法( Rails 4:如何解密rails 4会话cookie(给定会话密钥和秘密) ),但这些似乎在Rails 5中不起作用。

使用Rails存储加密的cookie

我需要在Rails中的cookie中存储一小段数据(少于10个字符),我需要它是安全的。 我不希望任何人能够读取该数据或注入他们自己的数据(因为这会打开应用程序进行多种攻击)。 我认为加密cookie的内容是要走的路(我应该签名吗?)。 最好的方法是什么? 现在我正在这样做,这看起来很安全,但对于那些比我更了解安全性的人而言,很多东西看起来都很安全,然后发现它并不安全。 我以这种方式保存秘密: encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token) cookies[:secret] = { :value => encryptor.encrypt(secret), :domain => “example.com”, :secure => !(Rails.env.test? || Rails.env.development?) } 然后我就这样读它: encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token) secret = encryptor.decrypt(cookies[:secret]) 那安全吗? 有没有更好的方法呢? 更新 :我了解Rails的会话及其安全性,通过签名cookie和可选地存储会话服务器端的内容,我确实使用会话来实现它的目的。 但我的问题是关于存储cookie,这是我在会话中不想要的一条信息,但我仍然需要它是安全的。

如何使用Rails保护数据库中的用户数据?

我正在创建一个需要存储大量敏感数据的rails应用程序。 为了向我的客户保证数据受到保护,我想基于每个用户对其进行加密。 我已经研究过寻找可以实现这一目标的gem。 到目前为止,我发现了保险箱和安全 。 总之,这似乎为我提供了一个解决方案。 但是,我想知道这是否是一种常见做法。 似乎大多数rails应用程序都有一些关于其用户的敏感数据存储。 AuthLogic正在处理我的密码加密,但电子邮件和其他个人数据同样敏感。 通常的做法是将这些项目未加密保留在数据库中并假设它永远不会受到损害吗? 我知道数据库位于一个无法与外界通信的区域,但是一个坚定的攻击者可能很容易妥协。 对于Rails开发人员来说,通常的做法是将数据保留为未加密状态,并且只是信任其Web服务器的安全性吗?

Rails:将加密数据存储在数据库中

我想加密数据库,因为存储了机密数据。 我用mongodb和mongoid。 这种数据库有可能吗? 如果不是,你可以提出哪些替代方案? PS主要目的是:如果有人破解服务器并窃取数据库,那将是无法加密的。 更新:感谢nickh ,我发现ActiveRecord有很多灵魂,但Mongoid和其他Mongo clinets没有。 为Mongo和Mongoid找到一些灵魂会很棒!