【问题标题】:How to save password using encrypt and decrypt in java using gwt如何使用gwt在java中使用加密和解密来保存密码
【发布时间】:2015-09-15 13:58:32
【问题描述】:

您好,我正在使用 GWT 开发 Java 项目。我想使用加密和解密来保存密码。在java中使用加密和解密保存密码的最佳方法是什么?我应该使用任何 API 吗?有什么帮助吗?

提前致谢

【问题讨论】:

  • 您永远不应该加密您的用户密码。您需要使用散列代替一些强大的散列,例如 PBKDF2、bcrypt 和 scrypt。由于散列函数是单向函数,因此您将无法“解密”散列。为了验证您的用户,您可以再次通过哈希函数运行密码,以便与存储在数据库中的哈希进行比较。
  • 不要忘记在散列之前将salt 添加到您的密码中以防止字典攻击。此外,使用安全的哈希算法,例如来自 SHA-2 family 的算法,尤其是不广泛使用但非常不安全的 MD5

标签: java gwt encryption


【解决方案1】:

你可以使用GWT-Crypto

使用非常简单,代码如下:

    //this will be used for encrypting and decrypting strings
    private TripleDesCipher encryptor;  

    ...

    //creating key for encryptor
    TripleDesKeyGenerator generator = new TripleDesKeyGenerator();
    byte[] key = generator.decodeKey("04578a8f0be3a7109d9e5e86839e3bc41654927034df92ec"); //you can pass your own string here

    //initializing encryptor with generated key
    encryptor = new TripleDesCipher();
    encryptor.setKey(key);

    ...

使用加密器的示例函数如下所示:

    private String encryptString(String string)
    {
        try 
        {
            string = encryptor.encrypt( string );
        } 
        catch (DataLengthException e1) 
        {
            e1.printStackTrace();
        } 
        catch (IllegalStateException e1) 
        {
            e1.printStackTrace();
        } 
        catch (InvalidCipherTextException e1) 
        {
            e1.printStackTrace();
        }

        return string;
    }

    private String decryptString(String string)
    {
        try 
        {
            string = encryptor.decrypt(string);
        } 
        catch (DataLengthException e) 
        {
            e.printStackTrace();
        } catch (IllegalStateException e) 
        {
            e.printStackTrace();
        } catch (InvalidCipherTextException e)
        {
            e.printStackTrace();
        }

        return string;
    }

【讨论】:

  • 不要那样做 - 客户端加密不是一个好主意,他们甚至在 their wiki 上有一篇文章。请通过 加密 通道 (SSL) 发送纯文本密码,并在服务器上对其进行安全处理(例如,使用 bcrypt 对其进行哈希处理)。
  • 我并不是说这是个好主意,因为你是对的 - 只是这是一种在 gwt 中加密/解密字符串的方法
  • 这是一种在 GWT 客户端中加密/解密的方法。 OP 要求“在 java 中使用加密和解密来保存密码的最佳方法”,所以不是专门在客户端 - 因此我的评论。虽然您的答案提供了一种有效的加密/解密方式,但专家强烈反对这种方式。这类似于将 MD5 称为密码哈希算法 - 技术上正确(它是一种哈希算法),但您应该使用更强大的加盐哈希算法(即 bcrypt)。
  • 谢谢你我想使用 bcrypt 所以我必须包括任何罐子?以及从哪里获取 bcrypt
  • 感谢 Igor Klimer 提供的信息。我使用 bcrypt 完成了它,但我在服务器端编写了 bcrypt 代码意味着使用 rpc 调用。所以从客户端我只是使用 RPC 调用将密码文本发送到服务器端是我的密码安全吗?然后我在将密码保存到实体之前使用 bcrypt 将密码转换为散列。我的密码安全吗??
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2012-12-12
  • 2019-05-25
  • 2013-05-15
  • 2018-03-20
相关资源
最近更新 更多