我目前正在将 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 获得的字符串的结果(上面的那些)给出了:
测试字符串假
这次字符串的加密工作(我过去没有工作,老实说我有点惊讶和困惑),但密码失败。
新编辑 - 一些字符串在加密时以 == 结尾。最后没有“==”的字符串可以跨系统解密。那些不工作的。也许这可能是一个线索?