2017-02-20 20 views
0

私はSpring SecurityとGrailsでWebアプリケーションを持っています。私が使用するデータベースはMySqlです。 .NETとC#を使用するようにフレームワークを変更したいが、同じデータベースを使用したい。春のセキュリティによって作成されたパスワードは暗号化されています。同じデータベースを使用してユーザー名とパスワードを検証する方法が必要でした。パスワードのデコードに.NET C#Webアプリケーションでspring secuirtyが格納されている

これを行う方法はありますか?

EDIT:

私はSHA解読に関するいくつかの記事を読んだ。それに対処する別の方法がありますか?

+0

パスワードは*ハッシュ*され暗号化されていないことを望みます。違いは最初のものは可逆的ではなく、これは重要な違いです。確かにNETで同じアルゴリズムを確実に実装できますが、手作業が必要です。 –

+0

いや私はいくつかの研究をしており、それは唯一の方法だと思われます。私は私の発見を掲載する。 – Adds

答えて

1

基本的に私は深くそれにこれを掘り下げるために持っていなかったが、これは

https://github.com/grails-plugins/grails-spring-security-core/blob/7f09c528bedcf53ff9d109dad725d68a54d36a2e/src/docs/passwords/salt.adoc

SystemWideSaltSourceとカスタムSaltSource

を助けるかもしれない春のセキュリティを使用する暗号化の形式を検討する必要がありますSpring Securityは、ユーザーごとに同じsaltを使用する、単純なSaltSource実装、 `{apidocs} org/springframework/security/authentication/dao/SystemWideSaltSource.html [SystemWideSaltSource]を提供しています。ユーザーごとに異なる値を使用するよりも堅牢性は低くなりますが、塩を使用しないよりも優れています。

次のようになりSystemWideSaltSourceを使用して、塩ソースBeanの例オーバーライド:application.groovy

import org.springframework.security.authentication.dao.SystemWideSaltSource 

beans = { 
    saltSource(SystemWideSaltSource) { 
     systemWideSalt = 'the_salt_value' 
    } 
} 

にsaltSource Beanとして

リスト1.設定SystemWideSaltSourceは、プロセスを完全に制御を持っているために、 grails-app/conf/spring/resources.groovyにsaltSourceという名前でBeanを定義することで、SaltSourceインタフェースを実装し、プラグインの実装を独自のものに置き換えることができます:

リスト2. Co application.groovy

import com.foo.bar.MySaltSource 

beans = { 
    saltSource(MySaltSource) { 
     // set properties 
    } 
} 

にsaltSource Beanのカスタム実装をnfiguringはまた、それが働いている方法を動作するようにデバッグにプラグインを取る可能性が理解するために、ここで見てみましょう:

https://github.com/grails-plugins/grails-spring-security-core/tree/7f09c528bedcf53ff9d109dad725d68a54d36a2e/src/main/groovy/grails/plugin/springsecurity/authentication/encoding

あなたは同じソルトキーを使用する2つのシステムでソルトアルゴリズムテストをテストする必要があります。両方のシステムで同じ方法で暗号化/復号化する必要があります。 (両者が同じドアキーを持っているので)

あなたはすでに春のセキュリティを所定の方法で暗号化しています(あなたには概要はありません)。

これは、2つのシステムに対して同じ塩でテストした場合、最も重要なことに、この塩を使用してスプリングセキュリティで構成された1つのテストシステムがあり、その結果をテストした場合です。ネットC#システムを最初に

また、私はそれを介して風邪をひいて、ユーザー名に関連するデフォルトの暗号化に関する何かを気付いた - それはあなたが他の目的のために何かを書くことができるかの手がかりを与えるかもしれない

+0

私はこれを試し、これが役立つかどうかを見ていきます。 – Adds

1

あなたはそれを行うことはできません - それはパスワードをデータベースにハッシュしておくことです。ただし、自分でハッシュを計算し、データベースに格納されている値と比較することはいつでも可能です。

+0

ハッシュを計算する方法を知っていますか?私はSHA解読に関するいくつかの記事を読んでいます(あなたが指しているものであれば)。それに対処する別の方法がありますか? – Adds

+0

@dawidが「ハッシュを比較する」と言ったときに@dawidが正しいことを話しているかどうかを確かめておくと、一連の値のハッシュを比較できます。パスワードを暗号化する全般的なポイントは、その情報を解読するためのあらゆるハッキングによるすべての試行を最小限に抑えることです。暗号化は鍵に基づいており、要するに同じ暗号化復号化プロセスが両側に存在することを保証する必要があります。http://www.thespringriver.com/simple-example-of-java-encryption-decryption/ https://www.mkyong.com/spring-security/spring-security-password-hashing-example/ – Vahid

+0

私は解読を意味しなかった、私は暗号化を意味した。ユーザーがパスワードを入力すると、SHA1/MD5(または春に使用したもの)を計算し、データベースにすでに格納されているハッシュと比較します。暗号ハッシュ関数は定義上一方通行です。元に戻すオプションはありません(パスワードハッシュマッピングの巨大なデータベースを持っている場合は、ハッシュに基づいてパスワードを推測することしかできません)。 – Dawid

関連する問題