Zxcvbn+RxBinding에 입력한 암호의 강도를 확인합니다.
EditText에 입력된 암호를 감지하고 강도를 검사하는 내용을 여기. 기사에 소개한 덕분에 시도해 봤습니다.
RxBinding은 RxJava2를 지원하기 때문에 이 기사에서 그것을 사용했습니다.
라이브러리 준비
다음 프로그램 라이브러리를 사용합니다.
RxBinding2
compile "io.reactivex.rxjava2:rxjava:2.1.3"
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
compile 'com.nulab-inc:zxcvbn:1.2.3'
※ 상기 내용은 기재되지 않았으며, 사용retrolambda은 λ식으로 기술합니다.zxcvbn4j
드롭박스가 공개한 비밀번호 강도 체크라이브러리zxcvbn의 자바 이식판은 뉴랩이 공개했다.
README에 기재된 바와 같이 사용 방법도 매우 간단하고
measure
방법에 문자열을 전달하면 결과를 얻을 수 있다.Zxcvbn zxcvbn = new Zxcvbn();
Strength strength = zxcvbn.measure("This is password");
레이아웃 생성하기
암호를 입력할 EditText를 추가합니다.<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:maxLines="1" />
입력한 암호에 따라 결과를 표시하는 View를 추가합니다.
zxcvbn의 점수는 0~4의 정수이기 때문에android:max="4"
.
비고정 암호 [0]<-->[4] 고정 암호<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/password_strength_bar"
style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:max="4" />
<TextView
android:id="@+id/password_strength_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:minLines="2" />
</LinearLayout>
입력을 체크하고 결과를 업데이트합니다.
RxBinding을 사용하여 EditText의 내용 변경을 알리고 zxcvbn으로 점수를 측정하여 다른 View에 결과를 전달합니다.
SignUpActivity.javaZxcvbn zxcvbn = new Zxcvbn();
// EditTextをObservable化
RxTextView.textChanges(mPasswordEditText)
// スコアの測定は計算スレッドで行う
.observeOn(Schedulers.computation())
.map(CharSequence::toString)
.map(zxcvbn::measure)
// 0〜4の整数でスコアを取得
.map(Strength::getScore)
// メインスレッドで他のViewに渡す
.observeOn(AndroidSchedulers.mainThread())
.subscribe(score -> {
mStrengthProgressBar.setProgress(score);
mStrengthTextView.setText(PASSWORD_STRENGTH_MESSAGES[score]);
});
여기서 다음 정렬을 준비하여 TextView에 분수에 해당하는 텍스트를 전달합니다.private static final String[] PASSWORD_STRENGTH_MESSAGES = new String[] {
"Weak", "Fair", "Good", "Strong", "Very Strong"
};
원시문에서는 M i s sing Backpressure Exception을 피하기 위해 .onBackpressureLatest()
를 지정했지만 RxJava2에서는 BackProessure가 Flowble 기능만 가지고 있었다.
Flowble는 서버 쪽에서 대량의 데이터를 처리하는 경우를 구상했다. GUI 이벤트 정도의 소량의 데이터라면 비용이 적은 Observable를 사용하는 것이 좋기 때문에 삭감하고 있다.
https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#observable-and-flowable
매번 입력할 때마다 불필요하게 처리하지 않으려면 Throttling 입력 후 간격이 있으면 알려주는 것이 좋다.
기타 strength.getScore()
가 아니라strength.getFeedback()
면 비밀번호에 대한 피드백을 받을 수 있다.
현지화도 대응getFeedback().getSuggestions(Locale.JAPAN)
하면 위와 같은 GIF처럼 일본어로 수정된 제안을 받을 수 있다는 소식이다.편리합니다!
Reference
이 문제에 관하여(Zxcvbn+RxBinding에 입력한 암호의 강도를 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ntsk/items/7f7dd0be458a4f0937bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:maxLines="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/password_strength_bar"
style="?android:progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:max="4" />
<TextView
android:id="@+id/password_strength_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:minLines="2" />
</LinearLayout>
RxBinding을 사용하여 EditText의 내용 변경을 알리고 zxcvbn으로 점수를 측정하여 다른 View에 결과를 전달합니다.
SignUpActivity.java
Zxcvbn zxcvbn = new Zxcvbn();
// EditTextをObservable化
RxTextView.textChanges(mPasswordEditText)
// スコアの測定は計算スレッドで行う
.observeOn(Schedulers.computation())
.map(CharSequence::toString)
.map(zxcvbn::measure)
// 0〜4の整数でスコアを取得
.map(Strength::getScore)
// メインスレッドで他のViewに渡す
.observeOn(AndroidSchedulers.mainThread())
.subscribe(score -> {
mStrengthProgressBar.setProgress(score);
mStrengthTextView.setText(PASSWORD_STRENGTH_MESSAGES[score]);
});
여기서 다음 정렬을 준비하여 TextView에 분수에 해당하는 텍스트를 전달합니다.private static final String[] PASSWORD_STRENGTH_MESSAGES = new String[] {
"Weak", "Fair", "Good", "Strong", "Very Strong"
};
원시문에서는 M i s sing Backpressure Exception을 피하기 위해 .onBackpressureLatest()
를 지정했지만 RxJava2에서는 BackProessure가 Flowble 기능만 가지고 있었다.Flowble는 서버 쪽에서 대량의 데이터를 처리하는 경우를 구상했다. GUI 이벤트 정도의 소량의 데이터라면 비용이 적은 Observable를 사용하는 것이 좋기 때문에 삭감하고 있다.
https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#observable-and-flowable
매번 입력할 때마다 불필요하게 처리하지 않으려면 Throttling 입력 후 간격이 있으면 알려주는 것이 좋다.
기타 strength.getScore()
가 아니라strength.getFeedback()
면 비밀번호에 대한 피드백을 받을 수 있다.
현지화도 대응getFeedback().getSuggestions(Locale.JAPAN)
하면 위와 같은 GIF처럼 일본어로 수정된 제안을 받을 수 있다는 소식이다.편리합니다!
Reference
이 문제에 관하여(Zxcvbn+RxBinding에 입력한 암호의 강도를 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ntsk/items/7f7dd0be458a4f0937bb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Zxcvbn+RxBinding에 입력한 암호의 강도를 확인합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ntsk/items/7f7dd0be458a4f0937bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)