1

我目前正在将 Jasypt 用于我的 Web 应用程序。它工作正常,但加密因它所在的服务器而异。

出于这个原因,我不能只获取实时数据库中的数据并将其用于我的开发环境中的调试。这会很有帮助,但我可以没有它。

让我担心的是,目前我正在使用托管服务提供商。到目前为止一切都很好,但我担心如果他们在某个时候更换服务器,或者将我的应用程序移到另一个服务器上,加密数据(例如用于登录的电子邮件和密码等)将不会被加密同样的方式,所有数据都将变得不可用。

有人知道 Jasypt 的替代平台吗?

或者有没有办法让 Jasypt 本身独立于平台?

谢谢,丹

PS:我需要一种具有这些基本功能的方法:字符串加密(可逆)、密码加密(不可逆但可比较)和“SHA-1”加密。抱歉,如果最后一段中的术语不是最正确的,但我根本不是加密专家。

谢谢!

编辑添加代码、结果和异常:

public class Test
{
      public static void main ( String [] args )
      {
        System.out.println ( "String encryption   = " + new EncryptionUtil ( ).encryptString ( "test string" ) );

        System.out.println ( "Password encryption = " + new EncryptionUtil ( ).encryptPassword ( "test password" ) );
        }
}

在开发环境中产生这个:

String encryption   = ybXukKBN57QSY8ITPgu9RmJQrZP4Py6g
Password encryption = nNX82PuKx5TrqBFSCy6yzNpco7Asov2S

每次输出都不同,但可以解密字符串,并通过执行以下操作比较密码:

public class Decryption
{
    public static void main ( String [] args )
    {
        System.out.println ( new EncryptionUtil ( ).decryptString ( "ybXukKBN57QSY8ITPgu9RmJQrZP4Py6g" ) );

        System.out.println ( new EncryptionUtil ( ).passwordsMatch ( "test password", "nNX82PuKx5TrqBFSCy6yzNpco7Asov2S" ) );
    }
}

这给出了这个输出:

test string
true

这是我创建的加密工具类:

public class EncryptionUtil 
{
    private String password = "<<=Encryption-Password=>>";
    // ============================================================ Encrypt password string
    public String encryptPassword ( String pwd )
    {
        if ( null != pwd && ! "".equals ( pwd ) )
        {
            return new BasicPasswordEncryptor ().encryptPassword ( pwd );
        }
        else
        {
            return "";
        }
    }

    // ====================================== Check if password entered matches that stored
    public boolean passwordsMatch ( String enteredPassword, String storedPassword )
    {
        return new BasicPasswordEncryptor().checkPassword ( enteredPassword, storedPassword );
    }

    //===================================================================== Encrypt string
    public String encryptString ( String text )
    {
        if ( null != password && ! "".equals ( password ) )
        {
            BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
            textEncryptor.setPassword ( password );
            return textEncryptor.encrypt ( text );
        }
        else
        {
            return "";
        }
    }

    // ===================================================================== Decrypt string
    public String decryptString ( String text )
    {
        try
        {
            if ( null != text && ! "".equals ( text ) )
            {
                BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
                textEncryptor.setPassword ( password );
                return textEncryptor.decrypt ( text );
            }
           else
           {
                return "";
        }
    }
    catch ( Exception e )
    {
        return text;
    }
}

    // =============== Encrypt email. Used for login and registration only, not decryptable
    public String encryptEmail ( String email )
    {
        if ( null != email && ! "".equals ( email ) )
        {
            return new String ( new Digester("SHA-1").digest ( email.getBytes () ) );
        }
        else
        {
            return "";
        }
    }
}

LIVE 环境中的相同给了我这个:

String encryption   = L/UlkJjYhLnYiov7XeDjb9W7+k8Gduvz
Password encryption = P+LJM7VJHu/hudSQOrmvcvV/DrzCv+pj

当我尝试解密字符串并检查密码时,我得到了这个:

public class Decryption
{
    public static void main ( String [] args )
    {
        System.out.println ( new EncryptionUtil ( ).decryptString ( "L/UlkJjYhLnYiov7XeDjb9W7+k8Gduvz" ) );

        System.out.println ( new EncryptionUtil ( ).passwordsMatch ( "test password", "P+LJM7VJHu/hudSQOrmvcvV/DrzCv+pj" ) );
    }
}

从 LIVE 获得的字符串的结果(上面的那些)给出了:

测试字符串假

这次字符串的加密工作(我过去没有工作,老实说我有点惊讶和困惑),但密码失败。


新编辑 - 一些字符串在加密时以 == 结尾。最后没有“==”的字符串可以跨系统解密。那些不工作的。也许这可能是一个线索?

4

2 回答 2

0

我不确定问题是什么 - 无论如何我设法通过随机尝试解决了它,但不知何故奏效了......

如果有人在同样的情况下发现他/她自己,尝试(在我的情况下是幸运的随机)是更改用于文本加密器的密码。

我无法解释它为什么起作用。

于 2013-09-20T11:31:29.750 回答
-2

你应该看看BouncyCastle

这里有一个例子

于 2013-09-19T13:34:27.457 回答