1

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

パスワードの暗号化と復号化には、仕事をする Jasypt を使用します。

文字列の暗号化、暗号化と復号化はできますが、復号化を一定にする方法が見つかりません。

私は解決策をたくさん探しましたが、私の問題に対処しているようには見えません。適切なキーワードを使用していない可能性があります。暗号化に慣れていません。

文字列の暗号化に Jasypt を使用する必要はありません。毎回"hello@hello.com" を "@ABC#EFG" に変換するものは何でも素晴らしいでしょう。

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

アイデア - 解決策へのリンクはありますか?

事前にどうもありがとう、ダン

4

4 に答える 4

2

固定塩発生器を使用する必要があります。

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

基本的に、アルゴリズムやパスワードなどを設定するときは、別のパスワードを生成して固定ソルト ジェネレーターで使用します。そこから、文字列を暗号化するたびに同じ結果が得られます。

余談ですが、奇妙なことに毎回同じ暗号化された文字列を使用しても、大文字と小文字を区別する検索は行われません。暗号化されたバージョンの "Miller" に対して Miller を検索しても、レコードは返されません。大文字と小文字の区別を無視できるのは、データを小文字で保存する場合のみです。たとえば、休止状態: Restrictions.eq(フィールド名, 値).ignoreCase()。これにより、検索対象の大文字と小文字の区別に関係なく、検索文字列が暗号化された小文字文字列とうまく一致します。

于 2014-08-19T22:58:26.657 に答える
0

私が問題を正しく理解していれば、たとえばJava暗号化アーキテクチャのハッシュメソッドを確認する必要があります。または、このトピックが役立つかもしれません(私は深く見ていません)。

于 2012-03-17T16:59:45.187 に答える
0

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

于 2012-03-17T16:56:06.330 に答える
0

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

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

于 2012-03-17T16:56:47.560 に答える