如何使用gwt在java中使用加密和解密保存密码

如何使用gwt在java中使用加密和解密保存密码,java,gwt,encryption,Java,Gwt,Encryption,嗨,我正在使用GWT进行java项目。我想使用加密和解密保存密码。在java中,使用加密和解密保存密码的最佳方法是什么?我应该使用什么API?有什么帮助吗 提前感谢您可以使用图书馆 用法非常简单,如下代码所示: //this will be used for encrypting and decrypting strings private TripleDesCipher encryptor; ... //creating key for encrypto

嗨,我正在使用GWT进行java项目。我想使用加密和解密保存密码。在java中,使用加密和解密保存密码的最佳方法是什么?我应该使用什么API?有什么帮助吗

提前感谢

您可以使用图书馆

用法非常简单,如下代码所示:

    //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;
    }

您永远不应该加密用户的密码。您需要使用散列,而一些强散列是PBKDF2、bcrypt和scrypt。由于散列函数是单向函数,因此无法“解密”散列。为了对用户进行身份验证,您可以通过哈希函数再次运行密码,以便与存储在数据库中的哈希进行比较。在哈希之前不要忘记添加密码,以防止字典攻击。另外,使用安全的散列算法,比如从,特别是不是广泛使用的,但非常不安全。请不要这样做-客户端加密不是一个好主意,他们甚至有一篇文章在这方面。请通过加密通道(SSL)发送纯文本密码,并在服务器上安全地处理它(例如,用bcrypt散列)。我不认为这是个好主意,因为你是对的——只是这是一种在GWT中加密/解密字符串的方法,这是一种在客户端在GWT中加密/解密字符串的方法。OP询问的是“用java加密和解密保存密码的最佳方法”,所以不是专门在客户端,因此我的评论是这样的。虽然您的答案提供了一种有效的加密/解密方法,但专家们强烈反对这种方法。这类似于提到MD5是一种密码散列算法——技术上是正确的(这是一种散列算法),但你应该使用更强的盐渍散列算法(即bcrypt)。谢谢你,我想使用bcrypt,所以我必须包括任何jar?从何处获取BCrypthank u Igor Klimer供您参考。我使用bcrypt完成了这项工作,但我在服务器端编写了bcrypt代码,这意味着使用rpc调用。所以,从客户端开始,我使用RPC调用将密码文本发送到服务器端,我的密码安全吗??然后,在将密码保存到实体之前,我使用bcrypt将密码转换为散列。那么我的密码安全吗??