1

現在、Web アプリケーションに Jasypt を使用しています。正常に動作しますが、ホストされているサーバーによって暗号化が異なります。

このため、ライブ DB のデータを取得して、開発環境でのデバッグに使用することはできません。あれば便利だけど、なくても生きていける。

私が心配しているのは、現在ホスティングプロバイダーを使用していることです. これまでのところすべて問題ありませんが、ある時点でサーバーを交換したり、アプリケーションを別のサーバーに移動したりした場合、暗号化されたデータ (ログイン用の電子メールやパスワードなど) が暗号化されないのではないかと心配しています。すべてのデータが使用できなくなります。

プラットフォームに依存しない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 から取得した文字列 (上記のもの) を使用した結果は、次のようになります。

テスト文字列 false

今回は、文字列の暗号化は機能しますが (以前は機能していませんでした。正直に言うと、少し驚き、混乱しています)、パスワードは機能しません。


新しい編集 - 一部の文字列は、暗号化すると == で終わります。末尾に「==」がない文字列は、システム間で復号化できます。動作しないもの。ひょっとしてこれがヒントになるかも?

4

2 に答える 2

0

問題が何であったかわかりません-とにかく、何とかうまくいったランダムな試みでそれを解決することができました...

誰かが同じ状況に陥った場合、試み (私の場合はラッキー ランダム) は、テキスト エンクリプタに使用されるパスワードを変更することです。

なぜそれが機能したのかについては説明できません。

于 2013-09-20T11:31:29.750 に答える
-2

あなたはBouncyCastleを見てみるべきです

ここに例があります

于 2013-09-19T13:34:27.457 に答える