2012-03-17 8 views
1

文字列(ユーザーの電子メール)を暗号化し、常に同じ結果の文字列を取得したい そのフィールドの検索を行っているので、ユーザーの電子メールをログインユーザー名として保存していますたとえば登録時に、ユーザの電子メールがすでに存在している。またはSELECTユーザーのパスワード、電子メール=「ABC」)Javaの文字列を暗号化するための定数結果

パスワードの暗号化および復号化のために、私は仕事をしていませんJasyptを使用しています。

文字列の暗号化は、私は、暗号化と復号化が、私は、復号化定数を持ってする方法を発見していないことができます。

私は解決策のために多くのことを検索しましたが、どれも私の問題に対処するように見えるん。私は正しいキーワードを使用していない可能性があります、私は暗号に精通していない。

文字列の暗号化にJasyptを使用する必要はありません。いつでも "[email protected]"を "@ ABC#EFG" に変換するものはとなるでしょう。

文字列の長さ、最初の文字などに応じて異なるスクランブリングアルゴリズムを使用して文字列のバイトをスクランブルしようとしました。残念ながら、MySQLで暗号化された文字列を保存すると機能しなくなります。私が理解しているところでは、MySQLが好きでないUnicode値を持つすべてのバイトは正しく保存されません(テストクラスに文字列を使用するとうまく動作しますが、実際に暗号化されたStringを保存し、 DB)

アイデア - ソリューションへのリンク?

大変ありがとうございます。Dan

答えて

0

ちょうどハッシュメソッドを見てください。 MD5、SHA-1、SHA-256は、MessageDigestを使用して取得できます。元の文字列のバイト数(getBytes("UTF-8")を使用)を取得するだけで、常に同じ結果が得られます。

0

単に文字列のMD5ハッシュを使用しないのはなぜですか?すべてのアルファベット文字が大文字または小文字に変換されていることを確認してください。結果は異なる出力になります。

Apache Commons Codecライブラリを見てください。具体的にはDigestUtilsのMD5アルゴリズム。 SHAなどのApache Commons Codecライブラリにはさまざまなダイジェストもあります

+0

お返事ありがとうございます。 – Dan

+0

@ダン - 問題ありません。いくつかの回答をアップヴォートし、正しいものを選ぶことを覚えておいてください。私はあなたが新しいので、ように歓迎することを参照してください。 –

0

私が問題を正しく理解していれば、Java Cryptography Architectureなどのハッシュメソッドを参照するか、this topicが役に立つでしょう(私はそれを深く見ていない)

+0

あなたの素早い返信のために皆様に感謝したいと思います。 電子メールを送信する必要があるときに復号化する必要があるため、電子メールのハッシュ値の使用は考慮していませんでした。 私は、電子メールを2つのフィールドに保存できることを認識しました.1つはハッシュ値が一定で、もう1つは同じ電子メールの復号可能な値を持つフィールドです。 ありがとうございます - 私はフォーラムには初めてですので、私自身の質問に8時間前に回答を投稿することはできませんので、今ここに投稿してください – Dan

2

固定塩発生器を使用する必要があります。あなたは、アルゴリズム、またはパスワードのようなものを設定しているとき

http://www.jasypt.org/api/jasypt/1.8/org/jasypt/salt/FixedStringSaltGenerator.html

基本的に、あなたが生成する別のパスワードを持っていると、固定塩・ジェネレータで使用します。そこから、文字列を暗号化するたびに同じ結果が得られます。同じ暗号化された文字列を毎回持っサイドノートとして

は、奇妙なことに、大文字と小文字を区別検索にはなりません。 Millerの暗号化バージョンに対してMillerを検索しても、レコードは返されません。大文字と小文字の区別を無視する可能性のある小文字のデータを保存する場合にのみ使用します。たとえば、休止状態:Restrictions.eq(フィールド名、値).ignoreCase()。大文字と小文字を区別して検索しても、検索文字列と小文字の文字列の暗号化されたバージョンが一致します。

+0

すぐにお詫び申し上げます謝罪。私は今あなたの非常に有用なコメントを見ただけです:) – Dan

関連する問題