代码之家  ›  专栏  ›  技术社区  ›  Salil

Rails中的加解密

  •  6
  • Salil  · 技术社区  · 16 年前

    我正在使用 require 'digest/sha1' 加密我的密码并保存到数据库。在登录过程中,我通过匹配保存在数据库中的加密密码进行身份验证,并再次加密一次使用输入密码字段。现在一切正常,但现在我想做'忘记密码'的功能。要做到这一点,我需要解密密码,这是保存在数据库中找到原来的一个。如何使用 digest/sha1 ?

    我正在使用ruby-on-rails,所以我需要ruby方法来实现它。

    5 回复  |  直到 16 年前
        1
  •  10
  •   bignum    16 年前

    SHA1是一个单向函数,你不能反转它。

    这可能对重新设置密码有意义: http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic/

    如果您想进行加密/解密,那么应该使用 AES . 但是,一旦开始使用加密/解密,您还必须开始担心密钥管理。

        2
  •  6
  •   ohho    16 年前

    加密密码。相反,存储密码的散列(最好用salt)。

    忘记

    http://railscasts.com/episodes/209-introducing-devise 如果你需要一些已经准备好的东西。

    编辑: 如果你真的需要加密,谷歌“openssl ruby”

    安全工作从来没有一个简单的解决方案。实现的好坏取决于 弱点 链接。

    所以,我的建议是,不要指望一个简短的答案

        3
  •  2
  •   Simone Carletti    16 年前

    正如Horace Ho所解释的,您永远不应该加密密码,而应该始终存储加密的salt。

    但是,对其他类型的数据(如机密信息)进行加密是完全可以的。 Encryptor 它是一个简单但功能强大的OpenSSL包装器。它提供了对任何类中的属性进行加密/解密的能力。

        4
  •  1
  •   the Tin Man    16 年前

    看看ezcrypto宝石: http://ezcrypto.rubyforge.org/

    还有地穴宝石,看看河豚: http://crypt.rubyforge.org

        5
  •  1
  •   Brian Armstrong    14 年前

    要对其他数据库字段执行双向加密,请签出 attr_enrypted

    https://github.com/shuber/attr_encrypted

    但正如其他人提到的,你不想用密码来做这件事。密码应该以一种方式存储。对于忘记密码的功能,你通常给他们发电子邮件一个不可能猜到的网址,让他们选择一个新的密码。

    这里有一个例子: http://railscasts.com/episodes/274-remember-me-reset-password?view=asciicast

    推荐文章